我如何在我的 Git 存储库中解决合并冲突?
当前回答
我要我的或他们的版本完整,或者想审查个别的变化,并决定每一个。
完全接受我的或他们的版本:
接受我的版本(本地,我们的):
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 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 合并文档了解合并冲突标记是什么。
此外,如何解决冲突部分解释如何解决冲突:
看到冲突后,你可以做两件事: 决定不合并. 唯一的清洁你需要是重新设置指数文件到头条承诺逆转 2. 和清理工作树的变化由 2 和 3; git merge --abort 可以用于此。
您还可以阅读关于合并冲突标记,以及如何在Pro Git书部分中解决它们的基本合并冲突。
使用耐心
对于一个大合并冲突,使用耐心为我提供了良好的结果,它会试图匹配区块而不是个别的线条。
例如,如果您更改您的程序的定位,默认 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>
尝试编辑 Visual Studio 代码,如果您还没有。
一旦尝试合并(并在合并冲突中登陆),Visual Studio Code 会自动检测合并冲突。
它可以非常好地帮助你,通过显示原来的变更,以及你是否应该接受进入或
目前的变化(即合并前的原始变化)。
它帮助了我,它也可以为你工作!
PS:它只会工作,如果您与您的代码和Visual Studio代码配置了Git。
请遵循以下步骤来解决 Git 中的合并冲突:
查看 Git 状态: git 状态 获取 patchset: git fetch (从您的 Git commit 查看正确的 patch) Checkout 一个本地分支(temp1 在我的例子中在这里): git checkout -b temp1 Pull 最近的内容从主: git pull -rebase 起源主 启动 mergetool 并检查冲突并纠正它们......并检查与您当前分支的远程分支中的变化: git mergetool Chec
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别