当我没有变化时为什么会有冲突?

时间:2015-04-09 10:37:23

标签: git github

我试图了解Git,我对它很陌生。我在Github上有一个分叉,我从其他人的存储库中分叉,我试图为他的存储库做贡献。

我做了我的更改,我很高兴所以我想做一个拉取请求。但我无法执行拉取请求,因为Github for Windows表示它无法合并而不会发生冲突。所以我这样做:

git fetch upstream 
git merge upstream/master

然后我从其他人所做的一些事情中得到了一些冲突,我使用Beyond Compare解决了这个问题。

然后我通过单击Github for Windows中的创建拉取请求来创建拉取请求。然后他看着我的变化,但他从不对他们感到满意,所以他做了一些修改然后投入他的分支。他的分叉上的变化只显示了我的角色和角色中的头像的1次提交。

所以我认为我应该得到他的新版本,所以我这样做:

git fetch upstream 
git merge upstream/master

试。

这样做给了我另外一些我必须解决的冲突。我不明白为什么我会发生冲突,自从我上次合并以来我没有做过任何事情。难道我不能得到他叉子的精确副本吗?

此外,我的拉取请求似乎列出了自从我开始为项目做出贡献以来所做的所有提交,不应该只显示自我上一次拉取请求以来的提交吗?

编辑:

根据bg17aw的要求,这是我的git config --list设置

alias.c=commit
alias.co=checkout
alias.dt=difftool
alias.mt=mergetool
alias.praise=blame
alias.ff=merge --ff-only
alias.st=status
alias.sync=!git pull && git push
apply.whitespace=nowarn
core.symlinks=false
core.autocrlf=true
core.editor=gitpad
core.preloadindex=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
color.ui=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle-ghfw.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
credential.helper=!github --credentials
filter.ghcleansmudge.clean=cat
filter.ghcleansmudge.smudge=cat
push.default=upstream
diff.tool=vs2013
diff.algorithm=histogram
difftool.prompt=false
difftool.bc4.cmd="c:/program files (x86)/beyond compare 3/bcomp.exe" "$LOCAL" "$REMOTE"
difftool.p4.cmd="c:/program files/Perforce/p4merge.exe" "$LOCAL" "$REMOTE"
difftool.vs2012.cmd="c:/program files (x86)/microsoft visual studio 11.0/common7/ide/devenv.exe" '//diff' "$LOCAL" "$REM
OTE"
difftool.vs2013.cmd="c:/program files (x86)/microsoft visual studio 12.0/common7/ide/devenv.exe" '//diff' "$LOCAL" "$REM
OTE"
merge.tool=bc3
mergetool.prompt=false
mergetool.keepbackup=false
mergetool.bc3.cmd="c:/program files (x86)/beyond compare 3/bcomp.exe" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"
mergetool.bc3.trustexitcode=true
mergetool.p4.cmd="c:/program files/Perforce/p4merge.exe" "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
mergetool.p4.trustexitcode=false
user.name=dallasm15
filter.hawser.clean=git hawser clean %f
filter.hawser.smudge=git hawser smudge %f
filter.hawser.required=true
diff.tool=bc4
difftool.bc3.path=c:/Program Files (x86)/Beyond Compare 4/bcomp.exe
difftool.bc4.path=c:/Program Files (x86)/Beyond Compare 4/bcomp.exe
push.default=simple
filter.lfs.clean=git lfs clean %f
filter.lfs.smudge=git lfs smudge %f
filter.lfs.required=true
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=https://github.com/dallasm15/Khazad.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
remote.ImpalerWrG.url=https://github.com/ImpalerWrG/Khazad.git
remote.ImpalerWrG.fetch=+refs/heads/*:refs/remotes/ImpalerWrG/*
remote.upstream.url=https://github.com/ImpalerWrG/Khazad
remote.upstream.fetch=+refs/heads/*:refs/remotes/upstream/*
branch.digging_creates_rocks.remote=origin
branch.digging_creates_rocks.merge=refs/heads/digging_creates_rocks

差异主要表明他用标签替换我的空间。

2 个答案:

答案 0 :(得分:2)

  

我不明白为什么我会发生冲突,我还没有做任何事情   自从我上次合并以来

由于您没有任何更改,因此无需存储任何内容。我会在这种情况下使用:

git fetch origin
git reset --hard origin/master

(您的遥控器的名称可能不同)。

  

我不明白为什么我会发生冲突,我还没有做任何事情   自从我上次合并以来。我不应该得到他的精确副本   叉?

如果您每次都遇到问题,可能会遇到有关git设置的问题。您可以使用以下方式查看设置:

git config –list

现在,如果可能,您还应该检查回购所有者的设置。 寻找core.autocrlf=true以检查行结尾是否不是问题(如果他使用的是Mac / Linux并且您使用的是Windows机器,则可能会发生这种情况)。

同时寻找core.filemode=false。这样可以防止跟踪文件权限(如果将其设置为true,则将其更改为false)。 Git只知道755和644。

问题的另一个可能原因是空格(制表符v空格)。 建议:始终使用设置来设置TAB = 4spaces。同样,您应该与回购所有者保持同步。根据您使用的IDE,您可以将其设置为与repo所有者的设置相匹配。

您可能会尝试深入了解其他有用的事情:

  • 在一个文件上运行git diff filename并将输出添加到您的问题中

  • 使用Sourcetree作为免费的GUI来帮助您处理冲突文件的长列表(您仍然可以使用命令行来了解git)

答案 1 :(得分:1)

尝试做:     git pull --rebase

它会阻止您的更改首先拉出上游的更改,然后隐藏弹出并在其上应用您的更改。