2013-04-25 96 views
1

我剛學會如何還原分支。這工作正常。事情是,我標記了主人的提交,並且我打算使用git describe命令來創建基於最新標記的部署。還原提交創建一個新的提交,所以git describe命令輸出與提交ammend標籤,就像這樣:還原分支更改git的標記名稱描述

前:

git describe 
1-2-0 

恢復「回」到在此之後提交:

git describe 
1-2-0-1ga99ae04 

有沒有辦法解決這個問題?或者我應該得到不同的最新標籤?

+0

你想要什麼樣的行爲?看起來你不希望Git告訴你,如果在此之後提交了1-2-0標記,並且沒有任何更改,即使某些提交反轉了其他一些提交。如果你想回到1-2-0標籤,只需'git checkout 1-2-0'。 – 2013-04-25 14:08:30

+0

是的,我明白你的意思。我不能只檢出1-2-0標籤,因爲我想將分支實際恢復到該狀態。我希望它完全恢復的行爲並使主分支處於1-2-0狀態。 – Kriem 2013-04-25 14:22:17

回答

1

只是要清楚。你真的沒有回覆「回來」。假設你有以下歷史。

A<--B<--C<--D 
      | 
     (tag:1-2-0) 

現在說你回覆C。這是發生了什麼事。

A<--B<--C<--D<--E 
      | 
     (tag:1-2-0) 

正如你所看到的,你已經向前邁進了歷史。如果這個標籤已經被釋放,那麼你可能想要考慮這個「修補程序」,並再次標記爲1-2-0-1,或沿着這些線。不知道你的版本號方案是什麼,所以顯然只是在你的過程中使用修補程序。

考慮到此更改,修復程序會導致此問題。

  (tag:1-2-0-1) 
       | 
A<--B<--C<--D<--E 
      | 
     (tag:1-2-0) 

但是,如果您還沒有公佈,甚至推這個標籤到遠程,只是要移動的標籤指向E,那麼你可以做這兩種方式。易於記憶的方式是刪除標籤並重新創建。

git tag -d 1-2-0 
git tag 1-2-0 E 

越短,速度更快,但無限的不太友好的方式來改變標籤而不刪除它是使用update-ref

git update-ref refs/tags/1-2-0 E 

在奇怪的情況下,您已經將標籤推入並希望將其從遠程移除,請使用以下語法。

git push <remote> :1-2-0 

假設原產地是您的遙遠。

+0

這非常好解釋。謝謝! – Kriem 2013-04-25 17:41:11

+0

難道你不能將標籤和頭部移回C嗎? – jtchitty 2014-01-24 22:14:57

+0

@jtchitty - 你當然可以,但你必須使用上述方法之一來做到這一點。所描述的這些方法在任何時候需要更改標籤時都應該一樣。只要記住標籤是無頭的,所以當你添加提交時,不會有HEAD,就像它在分支中那樣。您必須通過重新創建標籤或使用update-ref手動更新標籤。 – eddiemoya 2014-01-24 23:09:16