我如何在我的 Git 存储库中解决合并冲突?
当前回答
识别哪些文件处于冲突中(Git应该告诉你这一点)。 打开每个文件并检查Difs; Git demarcates它们. 希望它将是显而易见的哪个版本的每个区块保持。 你可能需要讨论它与同开发人员谁承诺的代码. 一旦你解决了冲突在一个文件 git 添加到_file. 一旦你解决了所有冲突,做 git rebase --continue 或 whateve
其他回答
git log --merge -p [[--] path]
它似乎并不总是为我工作,通常会显示两个分支之间不同的每一个承诺,即使在使用时也会发生这种情况 - 从命令中分开路径。
我要在这个问题上工作的是打开两个命令线,并在一个行中
git log ..$MERGED_IN_BRANCH --pretty=full -p [path]
而在另一方面
git log $MERGED_IN_BRANCH.. --pretty=full -p [path]
替换 $MERGED_IN_BRANCH 与我合并的分支和 [路径] 与相矛盾的文件. 这个命令将记录所有命令,在折叠形式,在(..)两个命令之间. 如果你留下一个侧空,如在上面的命令 git 将自动使用 HEAD (你合并的分支在这种情况下)。
这将允许你看到什么承诺进入文件在两个分支后,他们分开。
尝试编辑 Visual Studio 代码,如果您还没有。
一旦尝试合并(并在合并冲突中登陆),Visual Studio Code 会自动检测合并冲突。
它可以非常好地帮助你,通过显示原来的变更,以及你是否应该接受进入或
目前的变化(即合并前的原始变化)。
它帮助了我,它也可以为你工作!
PS:它只会工作,如果您与您的代码和Visual Studio代码配置了Git。
对于想要半手动解决合并冲突的 Emacs 用户:
git diff --name-status --diff-filter=U
显示所有需要冲突解决的文件。
打开这些文件中的每个一个,或所有一次,通过:
emacs $(git diff --name-only --diff-filter=U)
当您访问需要在 Emacs 中编辑的泡沫时,
ALT+x vc-resolve-conflicts
这将打开三个泡沫(矿,他们的,和输出泡沫)。导航按“n”(下一个区域),“p”(预测区域)。按“a”和“b”复制矿或他们的区域到输出泡沫,分别。
当完成时:按“q”。Emacs问你是否想保存这个泡沫:是的。
git add FILENAME
当所有类型的泡沫结束时
git commit
结束合并。
查看 Stack Overflow 问题中的答案 堕胎在 Git 中的合并,特别是 Charles Bailey 的答案,显示如何查看不同版本的文件有问题,例如,
# Common base version of the file.
git show :1:some_file.cpp
# 'Ours' version of the file.
git show :2:some_file.cpp
# 'Theirs' version of the file.
git show :3:some_file.cpp
你可以以一些方式解决合并冲突,因为其他人已经详细说明了。
我认为真正的关键是知道如何在本地和远程存储库中流动的变化。 关键是理解跟踪分支. 我发现我认为跟踪分支是我之间的“中间失落的片段”我的本地,实际的文件目录和远程定义为起源。
而不是:
git add .
git commit -m"some msg"
相反,我做:
git add file,file2,file3...
git commit # Then type the files in the editor and save-quit.
因此,你更有意识到哪些文件被添加,你也可以查看列表,并在使用编辑器为消息时思考更多。
[更新 - 随着时间的流逝,我已经更换到:
git status # Make sure I know whats going on
git add .
git commit # Then use the editor
)
此外(更重要的是你的情况),我试图避免:
git pull
或
git pull origin master.
git checkout master
git fetch
git rebase --hard origin/master # or whatever branch I want.
你也可能會發現這有用:
git 分支, fork, fetch, merge, rebase 和 clone,什么是差异?
推荐文章
- 如何在Visual Studio中删除未推送的外向提交?
- Git在两个不同的文件之间的差异
- 我如何使用vimdiff来解决git合并冲突?
- 如何将更改提交到另一个预先存在的分支
- 为什么使用'git rm'来删除文件而不是'rm'?
- 我如何安装imagemagick与自制?
- 致命:git-write-tree:错误构建树
- Git克隆远程存储库的特定版本
- git隐藏的意图用例是什么?
- 从远程Git存储库检索特定的提交
- 如何配置git bash命令行补全?
- 我如何迫使git拉覆盖每一个拉上的一切?
- 撤销“git add <dir>”?
- 是否可以在不先签出整个存储库的情况下进行稀疏签出?
- 如何移除SSH密钥?