重新设置后缺少提交

问题描述 投票:1回答:1

最近我在使用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 commit rebase
1个回答
2
投票

git rebase将要重新基础化的每个提交所引入的更改(是的,更改!)与自从重新创建基础分支以来在上游所做的更改进行比较。看起来您的提交D之一,E看上去与您的重新提交的提交之一完全相同。

请参见git patch-id

© www.soinside.com 2019 - 2024. All rights reserved.