最近,我在使用GIT rebase时遇到了一个非常特殊的情况。
很久以前,我从master分支分支出来,正在研究我的功能代码。 GIT历史看起来像这样:
A-B-C-D-E (master)
\F1-F2-F3-F4 (feature)
在功能分支上没有合并提交-只是简单的简单提交。
现在,当我使用rebase通过以下方式更新代码时:
(feature) $> git rebase master
现在,瞧瞧,在我的git历史记录中,我只能看到我的功能分支的4次提交中的3次提交。
中间一个F3
不见了
A-B-C-D-E-F1'-F2'-F4' (feature)
F3提交仅包含一个简单的单行开关,我能够快速检测到该开关,但是,如果更改更大或更难找到,会发生什么?
我尝试使用:
git rebase master --allow-empty
但是效果是相同的-只有3次提交。
我通过手动运行进行了实验:
> git checkout master
> git cherry-pick F1
> git cherry-pick F2
> git cherry-pick F3
> git cherry-pick F4
现在的效果是,所有个提交已成功地应用到master分支上了-如预期的那样。
其他信息: 跑步
git merge master
F1-F2-F3-F4提交中包含的所有更改都反映在代码中。 (包括F3中的标志更改)
有人可以向我解释那里发生了什么事吗?
我还可以进行哪些其他实验来找出问题所在?
答案 0 :(得分:2)
git rebase
将要重新建立基础的每个提交所引入的变更(是的,变更!)与自从重新建立分支以来的上游变更进行比较。看起来您的一个提交D
,E
看起来与您的一个重新提交的提交完全相同。
请参见git patch-id。