git - 变基后缺少提交
问题描述
最近我遇到了 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 中的标志更改)
有人可以向我解释那里发生了什么吗?
我可以进行哪些其他实验来找出问题所在?
解决方案
git rebase
将每个要重新设置的提交引入的更改(是的,更改!)与重新设置分支分叉后上游中的更改进行比较。它看起来像您的一个 commit D
,E
看起来与您的一个 rebase commit 完全相同。
请参阅git patch-id。
推荐阅读
- node.js - 如何在一个请求中发送 json 数组
- aws-amplify - Aws Amplify Datastore 数据未与 Dynamodb 同步
- html - 如何在两个子列中创建列
- c - 当变量在结构中的结构中时如何使用container_of()?
- python - 获取不包含另一个列表中元素的元素列表
- dji-sdk - 矩阵 300 RTK:两个流同时
- angular - 带过滤器的角度拖放
- ios - 如何通过单击 SwiftUI 中的按钮进入视图
- javascript - 是否有 ESLint 规则建议使用 a?.b?.c 而不是 abc 以避免一些错误
- cron - cron 调度程序如何在调度机制是轮询的分片持久存储之外进行扩展?