git - rebase 后缺少提交

标签 git commit rebase

最近我在 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 以来上游中的更改进行比较。看起来您的提交之一 DE 看起来与您的重新基准提交之一完全相同。

参见git patch-id .

关于git - rebase 后缺少提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59334989/

相关文章:

git - 简单来说, "git reset"是做什么的?

git - 禁用git中的所有分页

svn - SVN 如何存储提交时间?

git - 有没有命令告诉我们哪个分支是我们的还是他们的?

mercurial - 用 Mercurial/Hg 重写非线性历史?

git - Unity 和 git : multiproject structure and symbolic links, 更好的解决方案?

windows - 如何通过 Cygwin 使用 Windows git 创建的符号链接(symbolic link)

python - 有没有办法让 git commit --verbose 在使用预提交 Hook 时显示更新的差异?

heroku - 链接 Heroku 向 Github 提交?

git - 在shell脚本中获取git返回值