首页 > 解决方案 > 在 git rebase 期间备份到以前的冲突

问题描述

我正在以非交互方式将功能分支重新设置为 master git rebase feature master:.

在此过程中会出现一系列冲突,我一次手动解决它们。但是,在冲突 #3 上,我忘记保存具有一系列广泛更改的文件,只是盲目地保存git add文件、冲突和所有内容,以及git rebase --continue.

现在我遇到了另一个冲突,由于之前的冲突,文件看起来像一团糟。git rebase为我提供--continue, --skip, 和--abort, 并且我不想做任何这些:我想“备份”到上一个提交并保存我在“重新应用”补丁之前忘记保存的更改。变基。

实现这一目标的最简单方法是什么?

标签: gitversion-controlrebase

解决方案


这是我为解决这种情况所做的工作,以供将来参考。这篇文章给出了一些提示:

https://stackoverflow.com/a/38959162/586086

  1. 保存我忘记保存的文件的副本。
  2. git rebase --abort.
  3. 查找.git/logs/HEAD我搞砸的提交 SHA。(即使在中止变基之后,这些也会被保存。)
  4. git checkout -b recovery SHA.
  5. 将文件的冲突解决版本保存在冲突版本(我错过的保存)和git commit -m "resolve conflicts".
  6. git cherry-pickrebase 的剩余提交到recovery. 完成变基(这次更仔细地保存更改:)。
  7. git checkout featuregit reset --hard recovery

如果我在上面做这个过程,上面会有额外的"resolve conflicts"提交。git rebase -i如果这很重要,我可以通过在顶部执行 a 来摆脱master它,并将其压缩到它应该是其中一部分的提交中。


推荐阅读