git笔记

1. 安装

  • 阿里云下载Git
  • 选择安装目录时尽量不选在C盘
  • Git组件安装,一般默认即可
  • 选择开始菜单文件夹,默认
  • 选择Git默认编辑器,一般是vim。默认就行
  • 选择默认分支名
  • 选择环境变量,选第二个
  • 选择SSH,默认
  • 选择HTTPS,默认
  • 配置尾行符,默认
  • 配合git bash一起使用,默认
  • git pull行为,默认
  • 凭证管理,选第一个
  • 默认
  • 默认
  • 执行安装。
  • 安装成功后,使用git bash打开git

2. git command

  • Git练习
  • git commit:提交代码,把原来的代码变更并提交到仓库,基础节点叫做parent。原来的基础节点并不会被删除,类似复制粘贴
  • git branch <分支名>创建分支,用git checkout <分支名>切换到现有分支(*表示当前所在分支)。
  • git merge:把分支合并到主线路
    • 创建分支git branch bugFix
    • 切换分支git checkout bugFix
    • 提交git commit
    • 切换到git checkout main
    • 提交git commit
    • git merge <分支名>把两个分支合并

  • git rebase:不同于git merge 的另外一种合并方法
    • 创建分支git branch bugFix
    • 提交git commit
    • 切换到git checkout main,再提交git commit
    • 切换到git checkout bugFix,rebase到main

3. git应用

  • 安装:

    • 在debian或者ubuntu下 : sudo apt-get install git
  • 配置

    1
    2
    git config --global user.name
    git config --global user.email
  • 创建版本库并添加文件到仓库:

    1
    2
    3
    4
    # 创建版本库文件夹
    mkdir learngit
    cd learngit
    pwd #显示当前目录
  • 把该文件夹变成可以管理的仓库:

    1
    2
    # 会生成一个.git的文件,做版本管理用,git使用的前提是被.git管理起来;用ls-ah 查看该文件
    git init
  • 新建一个文本readme.txt,放到learngit下;把一个文件放到git仓库需要以下两步:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 把文件添加到仓库,这一步是把文件添加到仓库暂存区
    git add readme.txt

    # 一次性添加所有已经修改的文件
    git add -u

    # 一次性添加所有已删除的文件
    git add -A

    # 添加所有未跟踪的文件
    git add .

    # 真正把文件提交到仓库
    git commit -m "本次提交的说明"
  • 为什么需要add和commit两步的原因是:commit可以一次性提交很多文件,所以在commit之前可以多次add:

    1
    2
    3
    4
    git add file1.txt
    git add file2.txt
    git add file3.txt
    git commit -m "一次性提交上面三个文件"
  • 添加某个文件时,必须先保证文件在当前目录下存在,用ls或者dir命令查看当前目录的文件是否存在或者名称是否正确

  • 比较和追踪文件状态

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 可以查看当前仓库的状态,比如仓库里的文件被修改了,但是还没有被add到仓库暂存区
    git status

    # 详细查看某个被修改的文件的不同(和commit的文件相比)
    git diff readme.txt

    # 比较完不同之后就可以放心添加到暂存区了,提交修改也是用add,和提交新文件一样
    git add readme.txt

    # 在add之后commit之前再看一眼status,会告诉我们将要被提交的文件包括readme.txt(这时还存在暂存区)
    git status

    git commit -m "提交readme.txt的修改"

    # 在commit之后再看一眼状态,会告诉我们当前没有需要提交的修改,工作目录(working tree)是干净的
    git status
  • 版本回退:

    • 我们之前的每一次commit就相当于是一次“快照”,所以找到之前的提交记录,就可以回退到某一次提交的版本。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      # 查看commit的历史记录,会输出所有被记录过的改动,这里会有个HEAD指针
      git log

      # 一次提交记录占用一行输出(省略作者和日期那些不重要的信息,只保留SHA计算出来的值)
      git log --pretty=oneline

      # git中,HEAD指向的版本就表示当前版本。上一个版本是HEAD^;上上个版本是HEAD^^;往上100个版本是HEAD~100

      # 退回到上一个版本
      git reset --hard HEAD^

      # 使用reset之后,查看状态发现最新的变成了上一次修改的版本了
      git status
  • 如果回退之后,又想恢复。那么只要命令行窗口还没有被关掉,只要向上找到想要恢复那个版本的SHA号。执行如下指令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # SHA号不用填完,可以填个4或者5位,git会自己去模糊搜索。
    git reset --hard <sha>

    # HEAD指向哪个版本,当前版本就是哪个

    # 如果SHA已经找不到了,如下方法可以恢复:
    # 这条指令记录了使用者对git操作的每条命令,从这个指令的内容中找到已经回退掉的SHA和版本号
    git reflog

    # 找到之后就可以恢复了
    git reset --hard <sha>
  • 工作区和暂存区

    • 工作区:就是在电脑磁盘上就能看到的目录
    • 版本库:生成的.git其实就是一个版本库,他不算工作区。
    • git的版本库里面存了很多东西,其中最重要的就是暂存区,称作stage(或者index);git里面为我们自动创建的第一个分支叫做master;指向master的指针叫做HEAD
    • git add就是把文件修改添加到了暂存区
    • git commit就是提交更改,实际上是把暂存区的内容提交到了当前的分支;注意提交的只有暂存区里存在的东西
    • 在只有一个分支的情况,简单理解就是我们把所有的文件全部放到了暂存区,然后一次性提交了暂存区的所有修改
    • 一旦提交(commit)过后,如果你又没有对工作区做任何修改,那么工作区就变得干净
    • commit以后,暂存区的内容就为空了。
  • 撤销:

    • 情况1,如果是在工作区的文件被修改了,但是还没有提交到暂存区,有两种解决方案:
      • a.手动删除掉。
      • b.使用 git checkout -- readme.txt ,可以丢弃工作区的修改
      • 如果暂存区有该文件的上一个版本,则退回到当添加到暂存区时的状态
      • 如果暂存区内没有文件,则退回到上一次commit时的状态
      • 总之,就是让当前文件回到最近一次 git commit或者git add时的状态
      • 注意checkout 后面如果不加 – file 的话,就变成了切换分支的命令
    • 情况2,工作区的修改已经被提交到暂存区了:
      • git reset HEAD readme.txt :git reset既可以做版本回退,也可以用来把暂存区的东西撤销到工作区,撤销之后暂存区就是干净的了。
      • git checkout -- readme.txt :丢弃工作区的内容
    • 情况3,暂存区的内容已经被提交到仓库了:
      • 本地仓库,用git reset --hard HEAD^退回版本
      • 远程仓库,完蛋
  • 删除:

    • rm test.txt :直接删除工作区的文件,但是如果提交了的话,仓库还有记录
    • git status :直接告诉你工作区哪个文件被删除了
    • 如果正常删除,就先add再commit,把变更同步到仓库
    • 如果删错了,因为版本库还有,所以用: git checkout -- test.txt 恢复。
    • 从这里看出来,git checkout – file 其实是用版本库里的内容替换掉工作区中的内容,如果版本库没有改文件,那就是丢弃工作区该文件的修改方式了。
  • 远程仓库:

    • git remote add origin <远程仓库SSH地址> :origin是远程仓库的名字,也可以换成其它名字;这一步是在关联远程仓库
    • git push -u origin master :把本地的内容推送到远程,实际上是把当前分支master推到远程库,第一次用 -u,就把本地master和远程master管理,以后就可以不用加-u了。
    • git push origin master
    • git remote rm origin :解除本地和远程仓库的绑定,并没有删除远程仓库的内容
    • git clone <远程仓库SSH地址> :把远程仓库在本地克隆一个一样的
  • 分支管理:

    • 分支管理就是多人协作时,各自在自己的分支上干活,互不干扰
    • 直到开发完毕,一次性合并到原有分支上,高效又安全
    • 如果出现分支合并冲突的时候git就希望我们先手动解决冲突(人工确认更改需求),冲突解决后再合并
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      #创建分支,然后切换分支
      git branch dev
      git checkout dev

      #用一句话代替上面两句话,创建并切换分支
      git checkout -b dev

      #查看当前分支
      git branch

      #把dev分支的改动和当前所在分支合并
      git merge dev

      #合并之后,就可以放心删除没有用的dev分支了
      git branch -d dev

      # 如果出现分支合并冲突的时候git就希望我们先手动解决冲突,冲突解决后再合并

      # 可以查看分支合并图
      git log --graph

git笔记
http://example.com/2024/07/21/git笔记/
作者
xiao cuncun
发布于
2024年7月21日
许可协议