git rebase操作后如何保留最新commit并得到A-B-C-E-D提交树?
操作步骤
- 第一步:找回commit D的哈希值
执行git reflog查看本地HEAD的历史变动记录,找到之前指向commit D的条目,复制对应的哈希值(一般是7位字符,下文统一用<d-hash>指代)。 - 第二步:把D提交追加到E之后
确保你当前处于newFeature分支,执行以下命令即可:
如果执行时提示冲突,按照你之前处理rebase冲突的方式修改冲突文件,修改完成后执行git cherry-pick <d-hash>git add <冲突文件名>,再执行git cherry-pick --continue即可。
如果git提示该提交为空、无法cherry-pick,说明你之前处理冲突时把D的所有修改都替换成了mainline分支的内容,想要保留空的D提交的话,加上允许空提交的参数即可:git cherry-pick --allow-empty <d-hash>
原因说明
你之前处理完rebase冲突后如果所有文件内容都和mainline的E提交完全一致,执行git rebase --continue时git会判定当前提交没有有效变更,自动跳过该提交,就会出现D消失的情况。如果之后再遇到同类场景,处理完冲突后先执行git commit --allow-empty,再执行git rebase --continue就能保留空提交。
内容的提问来源于stack exchange,提问作者Liu Hantao
相关产品推荐
相关产品推荐

