我如何在我的 Git 存储库中解决合并冲突?
当前回答
我正在使用Microsoft的Visual Studio代码来解决冲突. 它很容易使用. 我在工作场所保持我的项目开放. 它检测和突出冲突. 此外,它提供了GUI选项,以选择我想要从头部或进入的任何变化。
此分類上一篇
其他回答
查看 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
GitLens for Visual Studio 代码
您可以尝试 GitLens for Visual Studio Code. 关键功能是:
3、轻松解决冲突
我喜欢这个特征:
此分類上一篇
第2章 现在的罪恶
此分類上一篇
第3章 错了
此分類上一篇
4、状态酒吧罪恶
此分類上一篇
有很多功能,你可以在这里查看。
如果你经常做小承诺,然后开始看看承诺评论与 git log --merge. 然后 git diff 会向你展示冲突。
我喜欢opendiff - Git 也支持 vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff,从盒子中出现,你可以安装其他: git config merge.tool “your.tool” 将设置您所选择的工具,然后 git mergetool 失败的合并后将向您展示背景中的 diffs。
每当您编辑文件以解决冲突时, git 添加文件名将更新索引,而您的 diff 将不再显示。
使用耐心
对于一个大合并冲突,使用耐心为我提供了良好的结果,它会试图匹配区块而不是个别的线条。
例如,如果您更改您的程序的定位,默认 Git 合并策略有时匹配单手 { 属于不同的功能。
git merge -s recursive -X patience other-branch
从文档中:
With this option, merge-recursive spends a little extra time to avoid
mismerges that sometimes occur due to unimportant matching lines
(e.g., braces from distinct functions). Use this when the branches to
be merged have diverged wildly.
与共同祖先相比
如果你有一个合并冲突,想要看到其他人在修改分支时想知道什么,有时更容易将他们的分支直接与普通祖先(而不是我们的分支)进行比较。
git diff $(git merge-base <our-branch> <their-branch>) <their-branch>
通常,您只希望看到特定文件的更改:
git diff $(git merge-base <our-branch> <their-branch>) <their-branch> <file>
我要我的或他们的版本完整,或者想审查个别的变化,并决定每一个。
完全接受我的或他们的版本:
接受我的版本(本地,我们的):
git checkout --ours -- <filename>
git add <filename> # Marks conflict as resolved
git commit -m "merged bla bla" # An "empty" commit
接受其版本(远程,自己的):
git checkout --theirs -- <filename>
git add <filename>
git commit -m "merged bla bla"
如果你想做所有冲突文件运行:
git merge --strategy-option ours
或
git merge --strategy-option theirs
查看所有变更并单独接受它们
git mergetool 评论 改变并接受每个版本. git 添加 <filename> git commit -m "merged bla bla"
默认的 mergetool 在命令线上工作. 如何使用命令线 mergetool 应该是一个单独的问题。
您也可以为此安装视觉工具,例如通讯和运行
git mergetool -t meld
它将打开本地版本(ours),“base”或“合并”版本(合并的当前结果)和远程版本(天花板)。在完成时保存合并版本,运行 git mergetool -t 再次登记,直到您获得“不需要合并文件”,然后转到步骤3和4。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别