我如何在我的 Git 存储库中解决合并冲突?
当前回答
下面是可能的使用案例,从顶部:
你会拖一些变化,但哦,你没有到目前为止:
git fetch origin
git pull origin master
From ssh://gitosis@example.com:22/projectname
* branch master -> FETCH_HEAD
Updating a030c3a..ee25213
error: Entry 'filename.c' not uptodate. Cannot merge.
所以你更新并尝试一次,但有冲突:
git add filename.c
git commit -m "made some wild and crazy changes"
git pull origin master
From ssh://gitosis@example.com:22/projectname
* branch master -> FETCH_HEAD
Auto-merging filename.c
CONFLICT (content): Merge conflict in filename.c
Automatic merge failed; fix conflicts and then commit the result.
所以你决定看看这些变化:
git mergetool
哦,我的,哦,我的,上流改变了一些事情,但只是用我的变化......不......他们的变化......
git checkout --ours filename.c
git checkout --theirs filename.c
git add filename.c
git commit -m "using theirs"
然后,我们试着最后一次。
git pull origin master
From ssh://gitosis@example.com:22/projectname
* branch master -> FETCH_HEAD
Already up-to-date.
是的!
其他回答
对于想要半手动解决合并冲突的 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
结束合并。
GitLens for Visual Studio 代码
您可以尝试 GitLens for Visual Studio Code. 关键功能是:
3、轻松解决冲突
我喜欢这个特征:
此分類上一篇
第2章 现在的罪恶
此分類上一篇
第3章 错了
此分類上一篇
4、状态酒吧罪恶
此分類上一篇
有很多功能,你可以在这里查看。
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 (你合并的分支在这种情况下)。
这将允许你看到什么承诺进入文件在两个分支后,他们分开。
如果您正在使用 IntelliJ IDEA 作为 IDE,请尝试通过:
git checkout <localbranch>
git merge origin/<remotebranch>
它将显示所有类似的冲突:
A_MBPro:test anu$ git merge 起源/ 自动合并 src/test/java/com/.../TestClass.java CONFLICT (内容): 合并冲突 src/test/java/com/.../TestClass.java
现在请注意,TestClass.java 文件在 IntelliJ IDEA 中显示为红色。
此外,Git 状态也将显示:
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: src/test/java/com/.../TestClass.java
在 IntelliJ IDEA 中打开文件,将有与
<<<<<<< HEAD
public void testMethod() {
}
=======
public void testMethod() { ...
}
>>>>>>> origin/<remotebranch>
在哪里,头部是你的本地分支和起源的变化/<remotebranch>是从远方分支的变化. 在这里保持你需要的东西,并删除你不需要的东西。
git add TestClass.java
git commit -m "commit message"
git push
当运行 git fetch 然后 git merge 当运行 git fetch 然后 git rebase 当运行 git pull (实际上相当于上述条件之一) 当运行 git stash pop 当应用 git patches (以电子邮件传输的文件出口的命令)
你需要安装一个合并工具,它是兼容的Git解决冲突. 我个人使用KDiff3,我发现它很好和方便. 你可以下载它的Windows版本在这里:
https://sourceforge.net/项目/kdiff3/文件/
然后设置 Git 配置以使用 KDiff3 作为其 mergetool:
$ git config --global --add merge.tool kdiff3
$ git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add mergetool.kdiff3.trustExitCode false
$ git config --global --add diff.guitool kdiff3
$ git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add difftool.kdiff3.trustExitCode false
(请记住将路径替换为 KDiff3 EXE 文件的实际路径。
$ git mergetool
然后它打开Kdiff3,并首先试图自动解决合并冲突。
下面是Kdiff3看起来怎么样:
$ git mergetool
No files need merging
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别