恢复原始合并后合并

HSc*_*ale 4 git

好吧,我在将一些代码合并到存储库中时不注意(某些代码的流程发生了重大变化),所以我不得不恢复合并提交。我回家了一天,现在在 master 上有更多的提交,我似乎无法触发合并,以便我可以将我的代码放入 master,因为我有两个文件之间的差异。我很笨拙,已经把代码推到了原点。

这是最近提交的单线图历史记录:

提交历史

我如何找回正确的合并屏幕以便我可以处理它?

我想我可以向我的分支添加另一个提交,然后尝试合并它,但这感觉很hackish。

mka*_*erg 7

当代码提交然后在分支上恢复时,由于原始恢复,重新提交相同的代码将不起作用。例如,假设您在 branch 上有一个或多个提交B,并且您使用 commit 还原它们R

master
|
* R
|\
| * B
Run Code Online (Sandbox Code Playgroud)

B再次合并到 master 将没有效果,因为 git 意识到所有提交之后R发生了恢复(即使再次合并)。BB

这里有 2 种可能的解决方案。

还原还原

一种是还原还原(称为此 commit R')。

master
|
* R'
|
* R
|\
| * B
Run Code Online (Sandbox Code Playgroud)

这个命令很简单。 $ git revert R


重新设置分支

另一种可能的解决方案是重订整支B,这样说到的复归R(称之为重建基础分支B')。这有一些不同的变体,但它们都依赖于用R.

master
| 
* New merge commit
|\
| * B'
|  \
|   ...
* R
|\
| * B
| ...
|/
* A
Run Code Online (Sandbox Code Playgroud)

rebase的命令如下:

$ git checkout B
$ git rebase --no-ff A
Run Code Online (Sandbox Code Playgroud)

Linus对这个场景有一些很好的评论以供更多阅读。