我正在学习变基,并看到了在功能分支上进行变基然后将其合并到主分支中的工作流程(作为示例):
git checkout feature
git rebase master
git checkout master
git merge feature
但是我看到最后一个命令的另一个类似选项是(而不是“git merge feature”):
git rebase feature
在这个例子中,最后一部分有何不同?结果不会是与 master 之上的功能提交相同的线性时间线吗?
您可能正在学习 rebase,但我认为您还没有完全理解它。
命令
git rebase xxx
的意思是:将我现在所在的分支变基,ontoxxx
。它不会以任何方式改变xxx
。
这很令人困惑,因为
git merge xxx
的意思恰恰相反:它的意思是,将 xxx
合并到我现在所在的分支中。
因此,例如,如果
feature
从 master
中分离出来,并且 master
有一些提交,并且 feature
有一些提交,那么 git switch feature; git rebase master
会更改分离点。这实际上就是它所做的全部。
如果我们从这个开始:
A -- B -- C -- D -- E (master)
\
X -- Y -- Z (feature)
然后
git switch feature; git rebase master
结果如下:
A -- B -- C -- D -- E (master)
\
X' -- Y' -- Z' (feature)
(请注意在移动的提交上使用“prime”标记,因为您实际上无法移动提交;这些提交是原始 X、Y 和 Z 的副本。)
本例中最后一部分有何不同?
在这种情况下,没有区别。这些语句中的任何一个都可以是第四个命令,并且结果将是相同的:
git merge feature
# or
git rebase feature
# or
git reset --hard feature
# or
git checkout -B master feature
由于我们以一种有趣的方式进行变基,请注意,4 个命令也可以减少到两个2:
git rebase master feature
git switch -C master feature
2 我真的这么做了吗?