【问题标题】:Started working before actually doing a git rebase after conflicts在冲突后实际执行 git rebase 之前开始工作
【发布时间】:2020-02-26 06:14:45
【问题描述】:
我在一个分支工作,我从远程拉rebase,我遇到了一些合并冲突。
我解决了冲突,但在git add 和git rebase --continue 之前,我分心并继续做实际工作。
现在我的状态是我的工作树在代码方面很好,解决了旧的冲突并且存在了新代码,但是git status 显示You are currently rebasing branch...
我能做些什么来解决这个问题而不是搞砸我的工作?
【问题讨论】:
标签:
git
git-rebase
git-pull
【解决方案1】:
您可以使用git rebase --continue 继续变基。
【解决方案2】:
不幸的是,目前很难理清这些问题。
rebase 仍在进行中,据 Git 所知,您仍在修复冲突提交的副本。因此,从那时起你所做的一切都必须是解决冲突的一部分。请记住,Git 实际上并不存储差异。它只存储完整的快照。如果愿意,您可以将 每个 文件替换为全新版本:Git 不在乎,它只是拍摄快照。因此,如果您现在继续,您将把您不想要包含在修复中的更改合并到 Git 认为 仍然的修复中向上。
(那可能还不错!如果可以,请考虑这样做。但假设不可以,请继续阅读。)
如果您的 rebase 到目前为止并不困难,我建议您将工作树中的所有内容完全移动(或复制)到存储库之外的某个其他目录中。这样,您就可以在此 Git 之外完全获得“您为解决冲突所做的工作”和“您从那时起所做的工作”的组合。然后,完成此操作后,您可以:
git rebase --abort
这将停止正在进行的变基并将一切恢复到您甚至开始变基之前的状态。您的所有工作现在都从存储库中消失了,这就是为什么您将其保存在存储库外部,它仍然存在。
然后,重做git pull开始的rebase,大概1这么简单:
git rebase
这将产生相同的冲突,您将不得不再次修复,但这次您可以记住git add 和git rebase --continue。您可以查看您保存的工作(在存储库之外),看看您上次是如何修复的。
真正完成变基后,您可以对外部文件使用git diff,或者将外部文件复制回内部并使用git diff。
(在将文件存储在 Git、临时分支或使用 git stash 时,有很多方法可以完成所有这些操作,但我不建议这样做。)
1这完全取决于您用于git pull --rebase 命令的内容。如果你只是运行git pull --rebase,你可以运行git rebase。如果您有其他参数,您可能需要git rebase FETCH_HEAD。