我正在尝试合并一个文件中有一个冲突的拉取请求(参见下文)。合并拉取请求的指令provided by github如下。执行此合并非常重要,因此提交公关的人可以获得信用。
# 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 merge errors修复合并。一组错误会变成另一组错误, ad infinitum 。我还尝试根据Ignore files during merge重置问题文件,并计划复制/粘贴所需的一行,但破坏的索引仍然存在。
这已经完全浪费了时间,我不再有兴趣尝试Git的方式,因为它浪费了这么多时间。现在我只想让Git执行合并并停止破坏索引文件。
以下是使用github指令合并时产生的输出:
$ 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.
答案 0 :(得分:20)
如果不解决冲突,就无法合并。否则,git怎么会知道要合并什么?但是,您可以使用git checkout --ours <filepath>
或git checkout --theirs <filepath>
从正在合并的任一分支中签出版本。这是一个例子:
假设您正在主分支合并分段:
git checkout master
git merge staging
git显示了一堆冲突:
...
CONFLICT: Readme.md
...
如果你想保留主人的Readme.md
版本,你就可以运行:
git checkout --ours Readme.md
请注意,因为你在主人--ours
上指的是“这个”分支,即主人。
现在,您只需将其添加到索引中即可将其标记为已解决:
git add Readme.md
这实际上忽略了Readme.md
分支上staging
的任何更改。
您可以对要从合并中省略的每个文件重复此过程。当你完成后,按照通常的方式提交:
git commit -m "whatever..."
要为所有有冲突的文件重复此操作
for f in $(git diff --name-only --diff-filter=U | cat); do
echo "Resolve conflict in $f ..."
git checkout --theirs $f
done
答案 1 :(得分:12)
没有办法解决冲突,这就是修改控制的工作方式(如果Alice说“a”而Bob说“b”,Git应该知道哪一个是正确的,除非你告诉它?) 。您可以做的就是直接git
在several possible ways之一合并时自行解决它们,例如
git merge -s recursive -X theirs <branch>
(-s recursive
是默认值,只有一个<branch>
,所以你可以在这里省略它。)
现在您的树中已经存在冲突,您可以
git add
它(Git中的add
加倍标记已解析的文件)git commit
完成合并;或git merge --abort
恢复合并前状态,然后使用上述自动解析选项重试合并答案 2 :(得分:4)
解决冲突就像处理正在进行的任何其他工作一样。必须暂存所有更改(git add
)然后提交。已成功自动合并的文件已经暂存。冲突的文件不是。
对冲突的文件进行编辑以使其满意,将其暂存(git add
),并在完成所有操作后git commit
。
具体而言......
test.cpp
以解决冲突(他们有<<<<
个标记)git add test.cpp
git commit
答案 3 :(得分:3)
将开发推向主
git push --force origin branchA:branchB
这将强制合并然后按
答案 4 :(得分:1)
如果您知道要在当前工作分支中进行更改,则只需将ours
标志添加到git merge中即可。
git merge -s ours master
这有效地忽略了所有其他分支更改,并确保合并输出是当前工作分支的输出。
此处提供更多信息和策略:https://www.atlassian.com/git/tutorials/using-branches/merge-strategy