如何通过将所有文件标记为“已解决”来继续git合并?

2ul0zpep  于 2023-06-20  发布在  Git
关注(0)|答案(3)|浏览(226)

我的朋友

  • 运行git merge master
  • 解决了一些冲突
  • 将所有文件标记为“已解决”
  • 将合并提交推送到临时分支

我拉了一下分支。我可以看到文件中的差异行,如

<<<<<<< HEAD
text1
=======
text2
>>>>>>> origin/master

我如何模拟我朋友停止的合并?
我可以接受的解决方案包括一些拉/ checkout 到其他地方,一些复制/粘贴命令,其他命令/工具,以检测不同的部分等。

nfs0ujit

nfs0ujit1#

我不会尝试从您朋友的工作中恢复,而是从头开始重做合并。
找到你朋友的合并提交,并使用git log --graphgit log --format=fuller来确定它的父提交:
例如,我有39184c481a,它是2aa69455a31d3c2f45f6的合并。

git log --format=fuller 39184c481a

commit 39184c481a
Merge: 1d3c2f45f6 2aa69455a3
Author: ...

然后 checkout 原来的第一个父对象,并将另一个父对象合并到其中

git checkout 1d3c2f45f6
git merge 2aa69455a3

现在我的状态和提交完成时一样。因此,从这里您应该能够重做冲突解决。
你可能想给予自己一个分支,以便以后能够找到这个工作:

git checkout -b dev.fixing-the-merge

最后把它合并回你的主分支,或者如果你的团队愿意的话,用git push --force重写历史。

eblbsuwk

eblbsuwk2#

在这种情况下,你可以通过git grep '<<<<<<<'代码找到那些仍然需要合并的地方。如果你更正了代码,你可以自己提交它来指明哪个解析是由哪个作者完成的,或者你可以修改现有的提交来使每个提交都是可构建的和正确的。然而,在这种情况下,提交的作者信息提供的信息较少。
你还需要考虑你的git组织工具。在github上,对分支的提交通常是被禁止的。因此,强制推送更新的提交通常是不可能的。在这种情况下,您必须创建自己的提交。在Gerrit上,修改提交是设计的一部分,它更新了开放的更改。

oipij1gg

oipij1gg3#

我把这个https://stackoverflow.com/a/54099010/2900777和这个https://stackoverflow.com/a/54104467/2900777结合起来。

  • 将分支拉入目录(BRANCH_DIR
  • 在另一个目录中模拟相同的合并(MERGE_DIR
  • BRANCH_DIR中,运行以下命令并对需要检查的文件进行排序
git grep '<<<<<<<' | cut -d':' -f1 | sort -u
  • MERGE_DIR中,对上一步中的每个文件运行
git mergetool FILENAME
  • 解决MERGE_DIR中文件的冲突后,将内容复制/粘贴到BRANCH_DIR中的文件中
  • 创建一个新的提交或修改前一个。(取决于您的使用情况)

相关问题