最近我在 GIT rebase 方面遇到了一个非常特殊的情况。
我很久以前就从主分支上分支出来,并正在研究我的功能代码。 GIT 历史看起来像这样:
A-B-C-D-E (master)
\F1-F2-F3-F4 (feature)
功能分支上没有 merge 提交 - 只是简单的提交。
现在,当我使用 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
现在的效果是,所有提交都成功应用于主分支 - 正如预期的那样。
附加信息: 当我运行时
git merge master
F1-F2-F3-F4 提交中包含的所有更改都已反射(reflect)在代码中。 (包括F3中的标志变化)
有人可以向我解释一下那里发生了什么吗?
我还可以进行哪些其他实验来找出问题所在?
最佳答案
git rebase
将每个要重新基化的提交引入的更改(是的,更改!)与自重新基化分支 fork 以来上游中的更改进行比较。看起来您的提交之一 D
、E
看起来与您的重新基准提交之一完全相同。
参见git patch-id .
关于git - rebase 后缺少提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59334989/