在冲突后实际进行 git 变基之前开始工作

Started working before actually doing a git rebase after conflicts

我在一个分支机构工作,我从远程拉取 rebase,我遇到了一些合并冲突。
我解决了冲突,但在 git addgit rebase --continue 之前我分心了,继续做实际工作。
现在我的状态是我的工作树在代码方面很好,旧的冲突已解决并且新代码存在但 git status 显示 You are currently rebasing branch...

我该怎么做才能解决这个问题而不弄乱我的工作?

您可以使用 git rebase --continue 继续变基。

不幸的是,此时很难理清事情。

rebase 仍在进行中,据 Git 所知,您仍在修复冲突提交的副本。因此,从那时起你所做的一切都必须成为解决冲突的一部分。请记住,Git 实际上并不存储差异。它只存储完整的快照。如果愿意,您可以将 每个 文件替换为一个全新版本:Git 无关紧要,它只是拍摄快照。因此,如果您现在继续,您将把您没有作为修复的一部分包含的更改合并到Git认为仍然是修复。

(这可能并不糟糕!如果可以,请考虑这样做。但如果不行,请继续阅读。)

如果到目前为止的 rebase 并不困难,我建议您将工作树中的所有内容完全移动(或复制)到存储库之外的某个其他目录中,因为它现在是这样的。这样,您就可以在 Git 之外完全使用 "what you did to fix conflicts" 和 "what you did since then" 的组合。然后,完成后,您可以:

git rebase --abort

这将停止正在进行的变基并将所有内容恢复到甚至开始变基之前的状态。你所有的工作现在都从存储库中消失了,这就是为什么你将它保存在外部存储库,它仍然存在的地方。

然后,重做git pull开始的rebase,大概就是1这么简单:

git rebase

这会产生相同的冲突,您必须再次修复,但这次您可以记住 git addgit rebase --continue 之后。您可以查看您保存的工作(在存储库之外),看看您上次是如何修复的。

一旦 rebase 真正完成,您可以对外部文件使用 git diff,或者将外部文件复制回内部并使用 git diff.

(在将文件存储在 Git、临时文件 运行 或使用 git stash 时,有一些方法可以完成所有这些操作,但我不建议这样做。)


1这完全取决于您在 git pull --rebase 命令中使用的内容。如果你只是运行git pull --rebase,你就可以运行git rebase。如果您有其他参数,则可能需要 git rebase FETCH_HEAD.