2022/11/23 2-git分支

140 阅读2分钟

书接上文,让我们再次新建一个文件second-commit.txt,并提交它,这时候git log有两条记录,在此基础上让我们了解一下分支的用法。

git branch

  1. 使用 git branch 可以查看我们的分支列表,以及当前所处的分支,目前只有一个默认的master分支。
  2. git branch second-branch 可以用于创建新的分支:second-branch

git checkout

// 创建新分支second-branch
git branch second-branch
// 切换到分支second-branch
git checkout second-branch

等价于

// 创建新分支third-branch并切换到它
git branch -b third-branch

git switch

在git版本 >= 2.23时,checkout分支可以使用等价于

git branch fourth-branch
git switch fourth-branch
// 或
git switch -c fourth-branch

git merge

当有了不同的分支后,我们在third-branch上新建了working-with-branches.txt文件并提交:

Now we know how branches work!

此时我们在third-branch上就有了三个提交记录。

也就是我们在开发完 third-branch分支后,希望将这个分支上的内容同步到master分支,我们需要切换到master分支,并在master分支执行

git merge third-branch

image.png 现在在master分支上就有了刚才在third-branch分支新增的文件,且master分支的提交记录上也多出了一条commit信息。

理解 HEAD

刚才我们新建了很多分支并且来回切换,我们可以注意到在不同分支进行git log时,可以看到不同关于 head 的信息。

当我们切换分支的时候,HEAD指向所在分支的最新提交!

在经历了创建切换分支,和merge的操作后,我们切换到各个分支,来观察一下它们的提交记录:

  1. second-branch image.png 当我们执行 git checkout second-branch切换到这个分支后,HEAD指向的就是这个分支的最新一条提交记录。
  2. master image.png 再次切换到 master 之后,发现HEAD指向了master的最新提交记录。
    同时在第二次commit上标识了second-branch,这是告诉我们如果我们切换到second-branch分支,那HEAD将会指向这个commit。

分离 HEAD

看到现在,我们认为HEAD总是和分支相关的,其实并不是!

checkout通常用于切换分支,但是它还可以切换到单个提交(commitID),

执行git checkout ebc975be2ff4015bd0122c2f552b9884f4c3bb92,我们通过第二条的commitID,切换HEAD执行了这一条提交记录。 image.png 它会提示我们目前处于 detached HEAD状态,此时我们通过 git branch 会发现我们不处于任何一条分支。 image.png 同时使用git log 查看提交记录,也只能看到这个记录和之前的提交,并且HEAD不执行任何分支。

image.png