我的朋友
git merge master
我拉了树枝。我可以在文件中看到差异行
<<<<<<< HEAD
text1
=======
text2
>>>>>>> origin/master
如何模拟我朋友停下的合并?
我认为解决方案还可以,其中包括一些将提取/签出到其他地方,一些复制/粘贴命令,用于检测差异部分的其他命令/工具等。
答案 0 :(得分:4)
我不会尝试从您朋友的工作中恢复过来,而是从头开始重做合并。
找到朋友的合并提交,并使用git log --graph
或git log --format=fuller
来确定其父提交:
例如,我有39184c481a
,它是2aa69455a3
到1d3c2f45f6
的合并。
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中的文件中
创建一个新的提交或修改前一个提交(取决于您的用例)