2013-03-22 123 views
7

伙计们,git的分支是提前起源/主,而回购是同步

这东西在git的,只是没有道理给我,这里是发生了什么

  • 我做了git status ,我看到我在分支大师,没有提交和工作目录是干净的。
  • 我然后做git pull origin master我拉了一堆代码,没有问题。
  • 现在,当我做git status我看到一个新的行你的分支是领先对手1产地/主的承诺

我的本地回购和远程回购是完全同步的,你的分支是超前什么呢原产地/主人1承诺的意思是,这是非常非常混乱的。任何输入/反馈都非常感谢。谢谢

+1

您为什么认为您的存储库与远程同步? – 2013-03-22 13:01:10

+0

你不是在默认情况下重新绑定你吗?你可以尝试提取和合并单独而不是拉? – 2013-03-22 13:01:56

+0

你可以使用“gitk”。查看哪些提交具有附加的“主”和“源/主”标签。 – 2013-03-22 13:30:40

回答

9

我所经历的,正是你看到的。 我找不到git-scm.com适当的解释,但我相信它是这样的:

  1. 我从克隆原点的回购,可以说起源有主,我现在有我的师傅当地回购
  2. 现在的起源和你的回购有一个参考上次提交。此引用主分支和参考是在你的本地回购和起源相同
  3. 比方说,有人(其他然后你)推新提交原产地掌握
  4. git pull origin master
  5. 现在你做git status和你会看到你的分支在原产地/主人面前甚至很难在你的本地回购中没有新的提交,也没有推动! (在这个例子中,自从步骤1(克隆)以来本地没有提交任何新东西)

==>我在做主设备时通过执行git pull origin来解决此问题。

A git pull origin master将从原始分支上的所有新提交拉到您的本地分支。

A git pull origin也将重新设置您对master的引用,等于master在引用时的引用! (当这种情况没有发生的时候,git-bash会认为你提前做了很多提交!因为在commit-tree里有很多提交之后你提交的主引用是提交的!)

这对你有任何意义吗?它确实给我:)

也请随时支持我toughts有点硬证据/文档:)

+0

,请同时阅读blunderboy下面的评论。有用户1781472说,解决了他的问题+一些评论为什么它解决了他的问题。 – deblendewim 2013-03-22 15:37:11

4

您已在本地计算机上添加了一个提交,该提交尚未发送到远程服务器。

如果您确信您的修改应与远程存储库共享,发送提交到远程与git push命令来完成:

git push orgin master:master 
+0

不,这就是整个问题,我没有任何东西在我的本地机器上没有提交。 – user1781472 2013-03-22 13:33:45

+0

** git push origin master **和** git push origin master的区别:origin/master ** – user1781472 2013-03-22 13:51:28

+0

First off:我的错误,命令应该读为'git push origin master:master' - 在帖子。 – LeGEC 2013-03-22 14:40:56

0

其实,这是你的假设,你的本地分支和远程分支同步。如果它表示你的本地分支在1次提交之前就是源于/主人,那肯定是。我们都信任GIT。

用这个来测试。

git checkout master // You move to master branch 
cat .git/HEAD //shows the commit on which HEAD is pointing to 

git checkout origin/master //you switch to origin master branch 
cat .git/HEAD 

如果您发现本地主服务器和远程主分支中的HEAD指向相同的提交,则两者都同步。

如果您当地的分行是提前1承诺,只要它推(如果你想)到远程分支作为

git push origin master 
+1

感谢您的回答,所以我在阅读本文之前只检查了本地(git log)和远程文件,它们都具有相同的近期提交。然后我做了一个** git fetch **,现在这个消息不见了,这说明我的分支在1提交之前。看起来像我得到的任何东西拉Git认为这是我的提交不推动和Git获取解决,不知道这里发生了什么 – user1781472 2013-03-22 14:24:53

+0

1.你是否推动你的承诺起源。如果你还没有推它,那么你的提交无法完成。 2。你是否用硬选项重置HEAD?因为这也会从您的分支中删除提交。 – sachinjain024 2013-03-22 14:42:43

+1

@ user1781472:在git-scm网站上,我发现了以下内容:更新远程跟踪分支: $ git fetch origin 上述命令从远程refs/heads /命名空间复制所有分支,并将它们存储到本地ref/remotes/origin /命名空间,除非分支。 .fetch选项用于指定非默认的refspec。 – deblendewim 2013-03-22 15:26:00

1

你是不是100%与远程仓库同步为你想。你有来自远程仓库的一切,是的。但是您的本地主人通过一次提交就可以领先于原产地/主人。

运行它,并告诉我们结果:

git log --all --graph --pretty=format:'%h %d %s' 

我希望看到这样的:

* (master) Commit D 
* (origin/master) Commit C 
* Commit B 
* Commit A 

如果我正确地读你的文章,你是一个犯提前,因为你有D,而远程分支在C上。您必须git push将提交D推送到远程存储库。那么你将100%同步。