2013-03-18 80 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