如何使用git再次跟踪远程分支

时间:2013-03-18 17:44:12

标签: git

我已经检查了远程分支Design0.5:该分支上的最后一个远程提交与顶部本地提交相同,此处标记为(无分支)。在本地,Design0.5是5个提交,我喜欢它的后面;而远程分支遥控器/ origin / Design0.5也显示在它的后面。这真让我困惑。我真正想做的就是跟踪对存储库的远程更改。我如何进入一个我正在跟踪Design0.5的状态,因为它是远程的?我可以放弃并检查其他地方的分支,但我的本地目录中有未跟踪的二进制文件,我不想移动;如果我可以修复我的本地而不诉诸于此,它也可以帮助我更好地理解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分支是如何工作的。

2 个答案:

答案 0 :(得分:3)

  

如何进入我正在跟踪Design0.5的状态,因为它是远程的?

正在跟踪远程分支。这就是为什么您获得有关本地分支过时的信息的原因。 [behind 5]告诉您,您的本地分支在其跟踪的分支后面是5个提交,即远程分支。

跟踪分支不会自动更新到远程分支的状态;这样做会删除你对自己的本地分支机构的控制权。

那么什么是远程跟踪分支呢?远程跟踪分支实际上就像任何本地分支一样:它是指向存储库历史记录中提交的(可移动)指针。唯一的区别是远程跟踪分支另外知道它跟踪哪个远程分支。而这种跟踪实际上只是一个“噱头”,可以获取有关您的本地分支与远程分支(后方/前方信息)之间的差异以及快速了解它必须从哪个远程接入或推送的信息。除此之外,没有额外的魔力。

现在,回到你的情况;你目前正处于独立的HEAD。很难说为什么你在这里确实得到了这个观点。我假设您启动了pull --rebase,它将重写您的本地提交,并且您遇到了冲突。在这种情况下,变形暂停并等待您解决冲突然后继续变基。 git status应该有助于确认这一点。如果你知道你不想保留你在分离的HEAD上做的任何事情,那么你可以简单地检查一个分支并恢复正常状态。

要实际更新远程跟踪分支(或任何分支),您只需要检查它们并运行git merge origin/otherbranch将其更新为获取的远程分支的状态,或者只运行{{ 1}}获取被跟踪的遥控器并获取最新版本。

答案 1 :(得分:1)

'后面提交'消息总是让我迷惑,因为我总是被告知git pull“与git fetch跟git merge相同”。就当前分支而言,这可能是真的,但是执行git pull实际上并不会更新本地引用遥控器/ origin / your-branch。如果你进行git fetch,引用应该跳回到行中。