书接上文,让我们再次新建一个文件second-commit.txt,并提交它,这时候git log有两条记录,在此基础上让我们了解一下分支的用法。
git branch
- 使用
git branch可以查看我们的分支列表,以及当前所处的分支,目前只有一个默认的master分支。 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
现在在
master分支上就有了刚才在third-branch分支新增的文件,且master分支的提交记录上也多出了一条commit信息。
理解 HEAD
刚才我们新建了很多分支并且来回切换,我们可以注意到在不同分支进行git log时,可以看到不同关于 head 的信息。
当我们切换分支的时候,HEAD指向所在分支的最新提交!
在经历了创建切换分支,和merge的操作后,我们切换到各个分支,来观察一下它们的提交记录:
second-branch当我们执行
git checkout second-branch切换到这个分支后,HEAD指向的就是这个分支的最新一条提交记录。master再次切换到
master之后,发现HEAD指向了master的最新提交记录。
同时在第二次commit上标识了second-branch,这是告诉我们如果我们切换到second-branch分支,那HEAD将会指向这个commit。
分离 HEAD
看到现在,我们认为HEAD总是和分支相关的,其实并不是!
checkout通常用于切换分支,但是它还可以切换到单个提交(commitID),
执行git checkout ebc975be2ff4015bd0122c2f552b9884f4c3bb92,我们通过第二条的commitID,切换HEAD执行了这一条提交记录。
它会提示我们目前处于
detached HEAD状态,此时我们通过 git branch 会发现我们不处于任何一条分支。
同时使用git log 查看提交记录,也只能看到这个记录和之前的提交,并且HEAD不执行任何分支。