How to force a merge to succeed when there are conflicts?
我正在尝试合并一个文件中有一个冲突的拉请求(见下文)。Github提供了合并拉请求的说明,如下所示。执行此合并非常重要,因此提交PR的人可以获得此合并的学分。
1 2 3 4 5 6 7 8 | # Step 1: From your project repository, check out a new branch and test the changes. git checkout -b droark-master master git pull https://github.com/droark/cryptopp.git master # Step 2: Merge the changes and update on GitHub. git checkout master git merge --no-ff droark-master git push origin master |
我知道如何修复一个冲突文件中的一行。我不知道该怎么做,就是让git执行合并,停止抱怨索引文件损坏。
如何让Git执行合并,确保提供拉请求的人获得该请求的信用,并停止破坏索引文件?
我试图用git合并错误修复合并。一组错误转化为另一组错误,无穷大。我还尝试根据"合并时忽略文件"重置问题文件,以复制/粘贴所需的一行,但断开的索引仍然存在。
这已经变成了一种完全浪费时间的行为,我不再有兴趣用Git的方式去做,因为它浪费了很多时间。现在我只希望Git执行合并并停止破坏索引文件。
以下是使用github的指令合并时生成的输出:
1 2 3 4 5 6 7 8 9 10 | $ git pull https://github.com/droark/cryptopp.git master From https://github.com/droark/cryptopp * branch master -> FETCH_HEAD Auto-merging validate.h Auto-merging validat2.cpp Auto-merging validat1.cpp Auto-merging test.cpp CONFLICT (content): Merge conflict in test.cpp Auto-merging pubkey.h Automatic merge failed; fix conflicts and then commit the result. |
号
没有解决冲突就没有办法合并。否则,Git怎么知道要合并什么?但是,您可以使用
假设您在分段中合并主分支:
1 2 | git checkout master git merge staging |
Git显示了一系列冲突:
1 2 3 | ... CONFLICT: Readme.md ... |
号
如果您想保留master上的
1 | git checkout --ours Readme.md |
请注意,由于您在"主"上,所以1(10)指的是"本"分支,即"主"。
现在,您只需将其添加到索引中即可将其标记为已解决:
1 | git add Readme.md |
。
这实际上忽略了
对于要从合并中忽略的每个文件,可以重复此过程。完成后,像往常一样提交:
1 | git commit -m"whatever..." |
为了对所有有冲突的文件重复此操作,可以执行以下操作
1 2 3 4 | for f in $(git diff --name-only --diff-filter=U | cat); do echo"Resolve conflict in $f ..." git checkout --theirs $f done |
。
没有办法解决冲突,修订控制就是这样工作的(如果Alice说"A",Bob说"B",Git怎么知道哪一个是正确的,除非你告诉它?).您所能做的就是在以几种可能的方式之一进行合并时,直接使用
1 | git merge -s recursive -X theirs <branch> |
。
(当只有一个
既然你的树上已经有了冲突,你也可以
- 遵循手动解决路线
- 根据您的心愿编辑文件
git add it(git中的add 加倍表示文件已解决)git commit 完成合并;或
- 使用
git merge --abort 恢复预合并状态,并使用上述自动解决方案重新尝试合并。
解决冲突就像处理其他正在进行的工作一样。所有更改必须分阶段进行(
编辑有冲突的文件使您满意,将它们分阶段(
具体来说……
- 编辑
test.cpp 以修复冲突(它们有<<<< 标记) - 埃多克斯1〔5〕
- 运行测试以确保一切正常。
- 埃多克斯1〔2〕
把发展推向主人
1 | git push --force origin branchA:branchB |
这将强制合并,然后按