git - 恢复原始 merge 后 merge

标签 git

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

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

Commit History

我如何找回正确的 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/

相关文章:

git - 如何使用 git "split"文件

git - Travis 从单个仓库构建多个 Docker 镜像

git - 没有提交的 git repo 中的未暂存文件

git - 取消链接文件失败。我应该再试一次吗?

GIT分支工作流程

git - pull 主在 Intellij 的另一个分支上

git 错误地将文件标记为重命名

git - 我可以将 CodeStar 的部署基础设施与现有的 CodeCommit 存储库一起使用吗?

git 添加远程分支

git - 有没有办法将 git 或 Mercurial diff 输出通过管道传输到 GUI Diff 工具?