在有人通过将所有文件标记为“已解决”进行推送的情况下,如何继续进行git合并?

时间:2019-01-08 19:21:15

标签: git diff git-merge

我的朋友

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

我拉了树枝。我可以在文件中看到差异行

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

如何模拟我朋友停下的合并?

我认为解决方案还可以,其中包括一些将提取/签出到其他地方,一些复制/粘贴命令,用于检测差异部分的其他命令/工具等。

3 个答案:

答案 0 :(得分:4)

我不会尝试从您朋友的工作中恢复过来,而是从头开始重做合并。

找到朋友的合并提交,并使用git log --graphgit log --format=fuller来确定其父提交:

例如,我有39184c481a,它是2aa69455a31d3c2f45f6的合并。

git log --format=fuller 39184c481a

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

然后签出原始的第一个父级并将另一个父级合并到其中

git checkout 1d3c2f45f6
git merge 2aa69455a3

现在我处于与提交完成时相同的状态。因此,从这里您应该能够重做冲突解决方案。

您可能想给自己一个分支,以便以后可以找到此作品:

git checkout -b dev.fixing-the-merge

并最终将其合并回您的主分支,或者如果您的团队愿意,可以用git push --force重写历史记录。

答案 1 :(得分:1)

在这种情况下,您可以git grep '<<<<<<<'遍历代码以查找那些仍需要合并的位置。如果您更正了代码,则可以自己提交该代码以指示由哪个作者完成的解决方案,或者可以修改现有的提交以使每个提交都可构建和更正。但是,在这种情况下,有关提交的作者信息较少。

您还必须考虑git组织工具。在github上,通常禁止提交分支。因此,通常无法强制推送更新的提交。在这种情况下,您必须创建自己的提交。在Gerrit上,修改提交是设计的一部分,该设计更新了未完成的更改。

答案 2 :(得分:0)

我将这个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中的文件中

  • 创建一个新的提交或修改前一个提交(取决于您的用例)