Git 合并 - 缺少冲突标记
Git merge - Conflict markers missing
使用 Windows 7, git 1.9.5.msysgit.1
我在 Git 中读到的有关合并冲突的教程建议失败的合并将导致冲突标记被放置在文件中的问题点。我似乎无法做到这一点。这是新存储库的示例工作流程:
git init
notepad file1.txt #make some edits
git add .
git commit -m "msg"
git branch mybranch
git checkout mybranch
notepad file1.txt #make some edits on line 3
git add .
git commit -m "msg"
git checkout master
notepad file1.txt #make a conflicting edit on line 3
git add .
git commit -m "msg"
git merge mybranch
#error: 'merge' is not possible because you have unmerged files
notepad file1.txt
上次打开 file1.txt 后,我期待在第 3 行周围看到标记 >>>>>>>> 和 ========== 冲突标记...但那里什么也没有,只有主分支中显示的文件文本。我的全局 .git 配置文件:
[user]
name = Andrew Barger
[core]
[core]
attributesfile = ~/.gitattribtues
editor = 'C:\Program Files (x86)\Vim\VIM74\gvim.exe'
[merge]
conflictStyle = diff3
[rerere]
enabled = true
是什么阻止我查看我的冲突?
编辑:
This answer,顺便说一句,没有帮助我。我似乎没有任何 .gitattributes 文件。不过,这里是 gitconfig --list
的输出,如果有帮助的话:
PS C:\GitRepos\git_sandbox> git config --list
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=Andrew Barger
core.attributesfile=~/.gitattribtues
core.editor='C:\Program Files (x86)\Vim\VIM74\gvim.exe'
merge.conflictstyle=diff3
rerere.enabled=true
alias.edit-unmerged=!f() { git diff --name-status --diff-filter=U | cut -f2 ; }; vim `f`
alias.add-unmerged=!f() { git diff --name-status --diff-filter=U | cut -f2 ; }; git add `f`
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
我会说,这可能是由您的 .gitconfig
中启用的 rerere
选项引起的。这意味着“重新使用记录的解决方案”并且只是说Git以与之前解决冲突相同的方式解决冲突。
因此没有冲突标记,因为 Git 实际上已经解决了那个冲突。尝试在禁用此选项的情况下重复您的工作流程。
在我的例子中,冲突标记没有出现,因为冲突文件是使用 UTF-16 编码的,这显然不能很好地与 Git 一起播放。我意识到这一点是因为 azurefrog 建议使用 git gui
查看文件,这清楚地表明 Git 无法比较文件,因为它认为它们是二进制文件。
故事的寓意:使用 UTF-8 编码。
使用 Windows 7, git 1.9.5.msysgit.1
我在 Git 中读到的有关合并冲突的教程建议失败的合并将导致冲突标记被放置在文件中的问题点。我似乎无法做到这一点。这是新存储库的示例工作流程:
git init
notepad file1.txt #make some edits
git add .
git commit -m "msg"
git branch mybranch
git checkout mybranch
notepad file1.txt #make some edits on line 3
git add .
git commit -m "msg"
git checkout master
notepad file1.txt #make a conflicting edit on line 3
git add .
git commit -m "msg"
git merge mybranch
#error: 'merge' is not possible because you have unmerged files
notepad file1.txt
上次打开 file1.txt 后,我期待在第 3 行周围看到标记 >>>>>>>> 和 ========== 冲突标记...但那里什么也没有,只有主分支中显示的文件文本。我的全局 .git 配置文件:
[user]
name = Andrew Barger
[core]
[core]
attributesfile = ~/.gitattribtues
editor = 'C:\Program Files (x86)\Vim\VIM74\gvim.exe'
[merge]
conflictStyle = diff3
[rerere]
enabled = true
是什么阻止我查看我的冲突?
编辑:
This answer,顺便说一句,没有帮助我。我似乎没有任何 .gitattributes 文件。不过,这里是 gitconfig --list
的输出,如果有帮助的话:
PS C:\GitRepos\git_sandbox> git config --list
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
user.name=Andrew Barger
core.attributesfile=~/.gitattribtues
core.editor='C:\Program Files (x86)\Vim\VIM74\gvim.exe'
merge.conflictstyle=diff3
rerere.enabled=true
alias.edit-unmerged=!f() { git diff --name-status --diff-filter=U | cut -f2 ; }; vim `f`
alias.add-unmerged=!f() { git diff --name-status --diff-filter=U | cut -f2 ; }; git add `f`
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
我会说,这可能是由您的 .gitconfig
中启用的 rerere
选项引起的。这意味着“重新使用记录的解决方案”并且只是说Git以与之前解决冲突相同的方式解决冲突。
因此没有冲突标记,因为 Git 实际上已经解决了那个冲突。尝试在禁用此选项的情况下重复您的工作流程。
在我的例子中,冲突标记没有出现,因为冲突文件是使用 UTF-16 编码的,这显然不能很好地与 Git 一起播放。我意识到这一点是因为 azurefrog 建议使用 git gui
查看文件,这清楚地表明 Git 无法比较文件,因为它认为它们是二进制文件。
故事的寓意:使用 UTF-8 编码。