来自干净目录的git pull有合并冲突

时间:2011-06-27 21:01:25

标签: git

我在干净的工作目录上从我的上游做了git pull,它向我展示了合并冲突。我花了大约一个小时手动重置它们,以为我搞砸了一些东西然后又发生了。

这是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),这似乎最接近,但答案却不尽如人意。

如何在不删除整个存储库并制作新克隆的情况下解决此问题?

3 个答案:

答案 0 :(得分:20)

您的工作目录可能很干净,但您有一个或多个本地提交但不在服务器上的提交。当你拉动时,git尝试将这些本地提交与服务器上的提交合并,但由于它们修改了代码的相同区域,因此它们会发生冲突。

您的选择基本归结为:

  1. Fix the conflicts.你告诉git如何处理冲突的变化,继续前进。
  2. 使用git pull --rebase重新生成并修复冲突。这与1没什么不同,但如果您的更改从未发布过(即,它们从未被推送过,那么),这可能会让您获得更清晰(线性)的历史记录。
  3. 放弃您的本地更改并使用git reset --hard remotename/remotebranch使用遥控器。这将丢失您在本地提交但未在其他地方推送的任何更改。

答案 1 :(得分:0)

拉,解决合并冲突并提交?即使你有一个干净的工作目录,如果你已经提交了一些工作,这与传入的更改有冲突,你就会遇到合并冲突。

答案 2 :(得分:0)

添加到 bdonlan 答案,当你有一些提交(在你的本地存储库上)时会发生这种情况,但远程存储库已经提前(与你的相比有一些进展)本地提交的文件)。

当我因为那些冲突而无法推动或拉动时,我才陷入困境。

试图做' rebase '或'重置 - 硬'没有运气。

对我有用的唯一解决方案是返回一个提交并拉动;

按照以下步骤操作:

警告:这是一种破坏性操作,会导致您丢失对此代码的最后更改,因此请先备份您的更改!

  1. 在本地存储库中使用“ git log ”并将其与远程提交日志进行比较 - 了解哪些提交未被推送
  2. 使用' git reset --hard '返回上一次代码适合远程存储库(我使用' git reset --hard HEAD ^ '故意丢失我之前的承诺)
  3. 现在' git pull '会起作用;用它来从远程服务器获取最新代码