如何通过将所有文件标记为 "resolved" 来继续 git 合并有人推送的地方?
How to continue a git merge where someone pushed by marking all files as "resolved"?
我的朋友
- 运行
git merge master
- 解决了一些冲突
- 将所有文件标记为 "resolved"
- 将合并提交推送到临时分支
我拉了树枝。我可以在
等文件中看到差异行
<<<<<<< HEAD
text1
=======
text2
>>>>>>> origin/master
如何模拟我朋友停止的合并?
我同意解决方案,其中包括一些 pull/checkouts 到其他地方,一些 copy/paste 命令,其他 commands/tools 检测差异部分等
我不会尝试从你朋友的工作中恢复,而是从头开始重新合并。
查找您朋友的合并提交并使用 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
重写历史记录。
在这种情况下,您可以git grep '<<<<<<<'
通过代码找到那些仍然需要合并的地方。如果您更正了代码,您可以自己提交它以表明哪个解决方案是由哪个作者完成的,或者您可以修改现有的提交以使每个提交都可以构建和纠正。但是,在这种情况下,提交的作者信息信息量较少。
您还必须考虑 git 组织工具。在 github 上,通常禁止向分支提交。因此,强制推送更新的提交通常是不可能的。在这种情况下,您必须创建自己的提交。在 Gerrit 上修改提交是设计的一部分,它更新了打开的更改。
我合并了这个 and this 。
将分支拉入目录(BRANCH_DIR)
在另一个目录中模拟相同的合并(MERGE_DIR)
在BRANCH_DIR、运行下面的命令中对需要检查的文件进行排序
git grep '<<<<<<<' |cut -d':' -f1 |sort -u
在MERGE_DIR中,对于上一步中的每个文件,运行
git mergetool 文件名
解决MERGE_DIR中文件的冲突后,copy/paste将BRANCH_DIR
中的文件内容
创建新的提交或修改之前的提交(这取决于您的用例)
我的朋友
- 运行
git merge master
- 解决了一些冲突
- 将所有文件标记为 "resolved"
- 将合并提交推送到临时分支
我拉了树枝。我可以在
等文件中看到差异行<<<<<<< HEAD
text1
=======
text2
>>>>>>> origin/master
如何模拟我朋友停止的合并?
我同意解决方案,其中包括一些 pull/checkouts 到其他地方,一些 copy/paste 命令,其他 commands/tools 检测差异部分等
我不会尝试从你朋友的工作中恢复,而是从头开始重新合并。
查找您朋友的合并提交并使用 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
重写历史记录。
在这种情况下,您可以git grep '<<<<<<<'
通过代码找到那些仍然需要合并的地方。如果您更正了代码,您可以自己提交它以表明哪个解决方案是由哪个作者完成的,或者您可以修改现有的提交以使每个提交都可以构建和纠正。但是,在这种情况下,提交的作者信息信息量较少。
您还必须考虑 git 组织工具。在 github 上,通常禁止向分支提交。因此,强制推送更新的提交通常是不可能的。在这种情况下,您必须创建自己的提交。在 Gerrit 上修改提交是设计的一部分,它更新了打开的更改。
我合并了这个
将分支拉入目录(BRANCH_DIR)
在另一个目录中模拟相同的合并(MERGE_DIR)
在BRANCH_DIR、运行下面的命令中对需要检查的文件进行排序
git grep '<<<<<<<' |cut -d':' -f1 |sort -u
在MERGE_DIR中,对于上一步中的每个文件,运行
git mergetool 文件名
解决MERGE_DIR中文件的冲突后,copy/paste将BRANCH_DIR
中的文件内容
创建新的提交或修改之前的提交(这取决于您的用例)