我如何在我的 Git 存储库中解决合并冲突?
当前回答
如果您正在使用 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 checkout master (到主分支) git pull (更新你的主分支以获得最新的代码) git checkout -b mybranch (检查一个新的分支,并开始在该分支工作,以便你的主分支总是留在顶部) git add. and git commit and git push (在你的本地分支后你的变化) git checkout master (回到你的主分支)
现在你可以做同样的事情,并保持你想要的多家当地分支机构,并同时工作,只要在需要时对你的分支机构进行吉特支票。
你可以以一些方式解决合并冲突,因为其他人已经详细说明了。
我认为真正的关键是知道如何在本地和远程存储库中流动的变化。 关键是理解跟踪分支. 我发现我认为跟踪分支是我之间的“中间失落的片段”我的本地,实际的文件目录和远程定义为起源。
而不是:
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,什么是差异?
奖金:
在上面的回答中,谈论拖动 / 混合 / 混合,我想分享一个有趣而有成效的技巧,
git pull - 回归
上面的命令是我Git生活中最有用的命令,这节省了很多时间。
在推到远程服务器之前,尝试 git pull --rebase 而不是 git pull 和手动合并,它将自动同步最新的远程服务器变更(使用一个 fetch + 合并),并将您的本地最新的合并放在 Git 记录的顶部。
如果发生冲突,只需使用
git mergetool
git add conflict_file
git rebase --continue
查找详细信息: “git pull –rebase” 做什么?
合并冲突发生时,同时对文件进行更改,这里是如何解决。
下面是简单的步骤,当你进入冲突状态时要做什么:
对于实用的教程,请检查: 剧本 5 - 解决混合冲突 由 Katacoda。
差异化
我成功地使用了DifMerge,它可以在Windows、macOS和Linux/Unix上视觉上比较和合并文件。
此分類上一篇
圖片來源:DifMerge(Linux屏幕拍攝)
git mergetool -t diffmerge .
马克思
brew install caskroom/cask/brew-cask
brew cask install diffmerge
而且,你可能(如果没有提供)需要下列额外简单的插槽放置在你的PATH(例如 /usr/bin):
#!/bin/sh
DIFFMERGE_PATH=/Applications/DiffMerge.app
DIFFMERGE_EXE=${DIFFMERGE_PATH}/Contents/MacOS/DiffMerge
exec ${DIFFMERGE_EXE} --nosplash "$@"
-Alt-Up/Down to jump to previous/Next changes. -Alt-Left/Right to accept change from left or right. -Alt-Up/Down to jump to previous/Next changes. -Alt-Left/Right to accept change from left or right
尝试编辑 Visual Studio 代码,如果您还没有。
一旦尝试合并(并在合并冲突中登陆),Visual Studio Code 会自动检测合并冲突。
它可以非常好地帮助你,通过显示原来的变更,以及你是否应该接受进入或
目前的变化(即合并前的原始变化)。
它帮助了我,它也可以为你工作!
PS:它只会工作,如果您与您的代码和Visual Studio代码配置了Git。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别