我如何在我的 Git 存储库中解决合并冲突?
当前回答
如果你经常做小承诺,然后开始看看承诺评论与 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 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,什么是差异?
我发现的最好的东西是使用“diff3”合并冲突风格:
<<<<<<<
Changes made on the branch that is being merged into. In most cases,
this is the branch that I have currently checked out (i.e. HEAD).
|||||||
The common ancestor version.
=======
Changes made on the branch that is being merged in. This is often a
feature/topic branch.
>>>>>>>
如果冲突更长,那么我会把三个部分切成三个单独的文件,如“小”,“普通”和“天花板”。
diff common mine
diff common theirs
提示2
git log --merge -p <name of file>
如果你有自动测试,运行这些,如果你有绳子,运行它,如果这是一个可构建的项目,然后在你承诺之前建造它,等等,在所有情况下,你需要做一些测试,以确保你的变化没有打破任何东西。
例如,如果你知道你和另一个人都在不同的重复工作,这两者都会影响相同的文件集,你应该提前彼此谈话,并更好地了解你每个人都在做什么类型的变化。
如果你不确定合并,不要强迫它。
识别哪些文件处于冲突中(Git应该告诉你这一点)。 打开每个文件并检查Difs; Git demarcates它们. 希望它将是显而易见的哪个版本的每个区块保持。 你可能需要讨论它与同开发人员谁承诺的代码. 一旦你解决了冲突在一个文件 git 添加到_file. 一旦你解决了所有冲突,做 git rebase --continue 或 whateve
合并冲突发生时,同时对文件进行更改,这里是如何解决。
下面是简单的步骤,当你进入冲突状态时要做什么:
对于实用的教程,请检查: 剧本 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
如果你只是想恢复远程主机,那么
git reset --hard origin/master
警告:所有本地变更将被丢失,请参见 https://stackoverflow.com/a/8476004/11769765.
推荐文章
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏
- “node_modules”文件夹应该包含在git存储库中吗
- 为什么git-rebase给了我合并冲突,而我所做的只是压缩提交?
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据
- 我应该在.gitignore文件中添加Django迁移文件吗?
- 错误:您对以下文件的本地更改将被签出覆盖
- Git rebase—即使所有合并冲突都已解决,仍然会继续报错
- 在Git中,我如何知道我的当前版本是什么?