首页 > 解决方案 > 变基后缺少提交

问题描述

最近我遇到了 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

现在效果是所有的提交都成功地应用到了主分支上——正如预期的那样。

附加信息:当我跑步时

git merge master

F1-F2-F3-F4 提交中包含的所有更改都反映在代码中。(包括 F3 中的标志更改)

有人可以向我解释那里发生了什么吗?

我可以进行哪些其他实验来找出问题所在?

标签: gitcommitrebase

解决方案


git rebase将每个要重新设置的提交引入的更改(是的,更改!)与重新设置分支分叉后上游中的更改进行比较。它看起来像您的一个 commit DE看起来与您的一个 rebase commit 完全相同。

请参阅git patch-id


推荐阅读