为什么git pull会导致成千上万的合并冲突?

时间:2015-10-08 07:20:51

标签: git

我们有一个远程仓库 origin ,它有主分支,开发分支和一堆bugfix分支。

几个月前我将它克隆到了本地,并检查了开发分支但没有做任何事情,然后我前几天切换到bugfix_1分支,但仍然没有做任何事情。

今天,我切换回开发分支,并运行 git pull ,但这导致了数千次合并冲突。

我曾经认为 git pull 类似于 svn update ,无论远程仓库中有多少文件被更改,都不应该有任何合并冲突,因为我没有& #39; t在当地改变了一切。

我曾经是一个svn用户,并且在git中有点新功能,如果有人可以提供一些解释或某些可能的原因,我们将非常感激。或者也许我只是做错了什么?

另一个问题是,假设我在开发分支上,这两个命令之间是否存在差异:

  

git pull

  

git pull origin development

谢谢。

修改

根据Jan的建议,我上周做了git fetch origingit reset --hard origin/development

今天,我运行git fetch origingit status,它给出了:

  

您的分支机构和' origin / development'有分歧,    并分别有45和51个不同的提交。

我不知道为什么会有45个本地提交,我什么都不做改变!

3 个答案:

答案 0 :(得分:3)

关于你的第二个问题:

git pull 

表示git fetch origin + git merge origin / development in your case。

git pull origin development

表示git fetch origin development + git merge origin / development。

在第二种情况下,它只获取origin / development分支。

答案 1 :(得分:1)

关于您的第一个问题:

是的,你绝对正确,如果你没有做任何改变,你不应该有任何合并冲突。我能想象的唯一可能的原因是,如果有人更改了服务器上的历史记录(您永远不应该这样做),而不是仅将更新推送到服务器。

您可以通过运行来使用服务器上的任何内容(如果您没有任何本地更改):

git checkout master
git reset --hard origin/master

关于第二个问题:

请把它放在StackOverflow的另一个问题上,这两个问题没有任何共同点......

答案 2 :(得分:0)

如果您未在开发分支中更改任何内容,则可以使用“git reset”来回滚最新版本。 如果您在开发分支中更改了某些内容,并希望合并远程主分支中的最新更改,则可以执行以下操作:

  • git checkout master
  • git pull (下载主分支中的最新更改)
  • git checkout development
  • git merge master (合并开发分支中master的更改)