最近我在使用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
现在效果是,ALL的提交已成功应用到master分支上-如预期。
附加信息:当我跑
git merge master
[F1-F2-F3-F4提交中包含的所有更改都反映在代码中。 (包括F3中的标志更改)
有人可以向我解释那里发生了什么吗?
我还可以进行哪些其他实验来找出问题所在?
git rebase
将要重新基础化的每个提交所引入的更改(是的,更改!)与自从重新创建基础分支以来在上游所做的更改进行比较。看起来您的提交D
之一,E
看上去与您的重新提交的提交之一完全相同。
请参见git patch-id。