好吧,我在将一些代码 merge 到存储库中时不注意(一些代码的流程发生了重大变化),所以我不得不恢复 merge 提交。我回家了一天,现在在 master 上有更多提交,我似乎无法触发 merge ,以便我可以将我的代码放入 master,因为我有两个文件之间的差异。我很笨拙,已经把代码推到了原点。
这是最近提交的单线图历史记录:
我如何找回正确的 merge 屏幕以便我可以处理它?
我想我可以向我的分支添加另一个提交,然后尝试 merge 它,但这感觉很hackish。
最佳答案
当代码提交然后在分支上恢复时,由于原始恢复,重新提交相同的代码将不起作用。例如,假设您在分支 B
上有一个或多个提交。 ,然后您通过提交 R
恢复它们:
master
|
* R
|\
| * B
merge
B
再次进入 master 将不起作用,因为 git 意识到 revert R
发生在 B
中的所有提交之后(即使 B
再次 merge )。这里有 2 种可能的解决方案。
还原还原
一种是还原还原(调用此提交
R'
)。master
|
* R'
|
* R
|\
| * B
这个命令很简单。
$ git revert R
重新设置分支
另一种可能的解决方案是重新设置整个分支
B
以便它在恢复之后出现 R
(调用重新定位的分支 B'
)。这有一些不同的变体,但它们都依赖于用新的提交重写分支历史,这些新提交不存在于 R
的历史中。 .master
|
* New merge commit
|\
| * B'
| \
| ...
* R
|\
| * B
| ...
|/
* A
rebase的命令如下:
$ git checkout B
$ git rebase --no-ff A
Linus 有一些不错的 commentary在这种情况下进行更多阅读。
关于git - 恢复原始 merge 后 merge ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53120765/