2013-03-18 153 views
0

我已经检查过远程分支Design0.5:该分支上的最后一个远程提交与顶级本地提交相同,此处标记为(无分支)。所以在本地,Design0.5在我想要的地方落后了5个;而且远程分支遥控器/ origin/Design0.5显示为它背后的实际位置。这让我很困惑。我真正想要在这里做的是跟踪存储库的远程更改。我如何才能达到我真正追踪Design0.5的状态,因为它是远程的?我可以放弃并检查其他地方的分支,但在我的本地目录中有未跟踪的二进制文件,我不想移动;它也可能帮助我更好地理解git,如果我可以修复我的本地而不诉诸于此。如何使用git再次跟踪远程分支

我已经查看了相关的查询Why did git set us on (no branch)?并尝试了各种建议(例如rebase)但没有成功。

我最后的两个命令都

$ git pull --rebase origin Design0.5 

$ git branch -av 
* (no branch)    130bef1 Debugging Program.fs note point at which crash occurs 
    Design0.3    f7f6179 Updated tests and comments 
    Design0.5    578ff32 [behind 5] updated project to include new files 
    master     578ff32 [behind 5] updated project to include new files 
    remotes/origin/Design0.1 f7f6179 Updated tests and comments 
    remotes/origin/Design0.3 f7f6179 Updated tests and comments 
    remotes/origin/Design0.5 f98e08e Added definition of FOO 
    remotes/origin/master 578ff32 updated project to include new files 

毫无疑问,我没有正确理解分支是如何git的工作。

+0

您是如何检查当前HEAD的? – wRAR 2013-03-18 18:04:41

+0

在这一刻,我会建议这样做:1)提交你有任何未提交的变更; 2)做'git branch temp'来保存当前工作线作为分支 - 以防万一,虽然它只是包含来自远程历史“Design0.5”的一些提交; 3)检查'Design0.5'并重新开始。 – kostix 2013-03-19 07:03:10

+0

@wRAR我没有 git checkout origin/DictDesign0.5 我看到的是一个错误,因为我应该检出远程原点。 – fairflow 2013-03-19 10:37:56

回答

1

'提交后'的消息总是用来混淆我,因为我总是被教导,git pull是“与git fetch相同,然后是git merge”。就目前的分支而言,这可能是真的,但是做git pull并不会实际更新本地参考遥控器/原点/分支。如果你做了git fetch,那么引用应该跳回到一行。

+0

是的,谢谢,这确实理清了远程引用(我的头仍然没有连接,但我认为我现在可以将其排除)。 – fairflow 2013-03-18 22:15:33

3

我该如何到达一个状态,我真的在跟踪Design0.5,因为它是远程的?

跟踪远程分支。这就是为什么你会得到有关你当地分公司过时的信息的原因。 [behind 5]告诉你,你的本地分支是5个落后于它正在跟踪的分支,即远程分支。

跟踪分支不会自动将自身更新为远程分支的状态;这样做会消除您对自己的本地分支机构的控制权。

那么什么是远程追踪分支呢?远程跟踪分支实际上就像任何本地分支一样:它是一个(可移动)指向存储库历史记录提交的指针。唯一的区别是远程追踪分支另外知道它追踪哪个远程分支。这个跟踪实际上只是一个“噱头”,用于获取有关本地分支与远程分支(后面/前面的信息)之间的区别的信息,并快速知道需要从哪个远程站点推送或推送到哪个远程站点。除此之外,没有额外的魔法。

现在,回到你的情况;你目前在一个分离的头部。很难说你为什么在这里得到这个位置。我认为你开始了pull --rebase,它会重写你的本地提交,并且你遇到了冲突。在这种情况下,重组会暂停并等待您解决冲突,然后继续重新分配资金。 A git status应该有助于在此确认。如果你知道你不想在分离的HEAD上做任何事情,那么你可以简单地检查一个分支并恢复到正常状态。

要实际更新您的远程跟踪分支(或任何分支),您只需检查它们并运行git merge origin/otherbranch将其更新为您获取的远程分支的状态,或者您只需运行git pull以获取跟踪远程并获得最新版本拉入。

+0

嗯。不,没有冲突。是的,我现在明白我的本地分支是在远程的后面(尽管这并不能解释为什么遥控器被报告在遥控器的后面......) $ git status #目前没有在任何分支上。 #未上传的文件:等等等 – fairflow 2013-03-18 22:11:28

+0

@fairflow,“遥控器被报告为遥控器后面的地方”可能是因为你没有做'git fetch origin',而你的远程分支(那些'refs/remote/origin/otherbranch等)没有得到更新。正如@Cags指出的那样,'git pull'确实*不*更新远程分支,因为它只显示其被告知要分支的分支。 – kostix 2013-03-19 07:00:27

+0

是@ kostix我认为就是这样。 – fairflow 2013-03-19 12:29:56