我从我的上游在一个干净的工作目录上执行了一个git pull
,它给我带来了 merge 冲突。我花了大约一个小时手动重置它们,以为我搞砸了,结果又发生了。
这是 git 中的错误吗?我对此知之甚少,所以我完全愿意接受我对自己做了这件事。
这是我截断的输出(大约有 9 个文件,但我想节省空间,文件名已更改以保护无辜者):
$ git status
# On branch master
nothing to commit (working directory clean)
$ git pull
Auto-merged xxxx/xxxx/xxxx.xxx
CONFLICT (content): Merge conflict in xxxx/xxxx/xxxx.xxx
Automatic merge failed; fix conflicts and then commit the result.
我正在使用 Solaris 11 Express 和默认的 git 包。
$ uname -a
SunOS xxxx 5.11 snv_151a i86pc i386 i86pc Solaris
$ git --version
git version 1.5.6.5
$ pkg list git
NAME (PUBLISHER) VERSION STATE UFOXI
developer/versioning/git 1.5.6.5-0.151.0.1 installed -----
我发现了这个问题:Git pull fails: You have unstaged changes. Git status: nothing to commit (working directory clean) ,这看起来最接近但答案不令人满意。
如何在不删除我的整个存储库并创建新克隆的情况下解决这个问题?
最佳答案
您的工作目录可能是干净的,但是您有一个或多个您在本地进行的提交不在服务器上。当您 pull 时,git 会尝试将这些本地提交与服务器上的提交 merge ,但由于它们修改了代码的同一区域,因此它们会发生冲突。
您在这里的选择基本上可以归结为:
- Fix the conflicts.您告诉 git 如何处理冲突的更改,然后继续。
- 使用
git pull --rebase
rebase 并修复冲突。这与 1 没有太大区别,但如果您的更改从未发布(即,它们从未被推送过),这可能会让您获得更清晰的(线性)历史记录。 - 使用
git reset --hard remotename/remotebranch
放弃本地更改并使用远程更改。这将丢失您在本地提交但未推送到其他地方的所有更改。
关于git pull from clean 目录有 merge 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6498914/