git rebase 命令
了解 git rebase 及其使用方法。
变基(Rebasing) 是一种高级且强大的技术。它类似于合并(merge),但不会从两个分支创建新的提交。相反,它会提取一个分支的差异,并将这些差异重新应用到另一个分支上。
变基允许我们将一整棵树的快照移动到一个新的父快照中。
变基完成后,提交历史看起来就像一条连续的时间线。
git rebase 命令的实际操作
假设存在一个名为 dev_logic 的功能分支。当前位于 master 分支,我们希望合并这两个分支,使它们的历史呈现线性结构,仿佛一个功能是在另一个功能之后开发完成的。
在终端中执行以下命令:
1$ mkdir RebaseExample 2$ cd RebaseExample 3$ git init 4$ echo M0 > file1.txt 5$ git add file1.txt 6$ git commit -am "M0" 7$ git checkout -b dev_logic 8$ echo L1 >> file1.txt 9$ git commit -am "L1" 10$ git checkout master 11$ echo S1 >> file1.txt 12$ git commit -am "S1" 13$ echo S2 >> file1.txt 14$ git commit -am "S2" 15$ git log --all --decorate --graph
现在,切换到 dev_logic 分支并执行变基操作。可能会出现冲突,我们可以根据提示或错误信息进行解决。修复冲突后,可以使用 --continue 选项继续变基过程。成功完成变基后,我们的提交树将如下所示:
在下方终端中输入以下命令:
1$ git checkout dev_logic 2$ git rebase master
然后使用 nano 编辑器打开 file1.txt,手动解决冲突:
1$ nano file1.txt
解决冲突后,需要重新添加文件,并继续变基流程:
1$ git add file1.txt 2$ git rebase --continue
再次查看提交图谱,可以看到已经成功执行了变基操作:
1$ git log --all --decorate --graph
file1.txt git add file1.txt git commit -am "M0" git checkout -b dev_logic echo L1 >> file1.txt git commit -am "L1" git checkout master echo S1 >> file1.txt git commit -am "S1" echo S2 >> file1.txt git commit -am "S2" apt update apt install nano clear" mode="edit">
交互式模式
我们还可以使用 git rebase -i dev_logic 进入交互式模式。通过该模式,可以逐个步骤地处理变基过程,还可以将多个提交合并为一个提交。
注意: 变基并不会将提交移动到目标分支。它会在目标分支上重新创建新的提交。因此,变基后的提交的 SHA-1 哈希值会发生变化。所以,不建议对已推送到远程仓库的分支进行变基,因为其他协作者可能正在基于这些提交工作。