2016-01-01 49 views
0

分支名稱指向分支的提示/結束提交。更改分支名稱指向的提交?

是否有直接將分支名稱更改爲指向其他現有提交(例如原始提示提交的某個始祖/後代)的命令?通過「直接」,我的意思是命令將提交移動到(或類似的)和分支的名稱作爲參數。通過「間接」,例如,提交,合併,重定位,推送和拉取/提取,移動分支的名稱,但不要將提交移動到(或類似的東西)作爲一個參數)。

+0

你的意思是說,一旦分支合併(這將是你當前的分支),你希望移動到當前提交哈希從哪裏來的分支? –

+0

沒有。我提到了「一個分支」,不一定是當前的分支。 「合併」不算數,因爲它不會將提交移動到(或類似的)作爲參數。 – Tim

回答

2
$ git checkout the-branch 
$ git reset <commit-hash> 

如果你也想擁有你的工作目錄反映了國家提交,添加--hard標誌。


我是失職,如果我沒有提供這2個警告:

  1. 你改寫歷史。如果你已經推過,請小心這個。
  2. 如果您使用的是--hard標誌,那麼您將失去自該提交以來完成的所有進度。除非您有其他參考您當前分支的提示,否則您將無法(但reflog)回到當前狀態。
+0

結帳不會移動分支的名稱,但會移動「HEAD」。我不熟悉重置,所以我不評論它。 – Tim

+0

@Tim當然不是。 'reset'的確如此。 –

+0

謝謝。你能解釋它爲什麼會這樣嗎? – Tim

1
git branch -f $BRANCH $COMMIT 

請注意,您試圖移動不能成爲你的當前分支的分支。有關更多信息,請參見man page

1

分支名稱指向分支的提示/結束提交。

正確(根據定義,真的)。

是否有命令直接將分支名稱更改爲指向不同的現有提交(例如,原始提示提交的某個始祖/後代)?

創建或更改引用的目標SHA-1標識的低級命令是git update-ref。使用它需要一點技巧,因爲它需要你拼寫出完整的參考名稱:

$ git update-ref refs/heads/foo newvalue [ oldvalue ] 

(加入oldvalue部分使得報錯了,如果引用不具備預期的值;見the documentation瞭解詳細信息)。它也能夠打破象徵性的參考。

git branch command將允許您將分支移動到新的目標提交,如Corubba already noted。它更適合隨意使用(不像git update-ref那樣容易出錯),但對於腳本編寫(如果想要緊密但完全控制的話)更不適合。

的​​允許移動到HEAD是一個符號引用,或改變存儲在HEAD值時HEAD不是一個符號引用的分支(即,當你在「分離HEAD」模式)。儘管如此,它不能移動任何其他分支。並且它也在索引上運行(除了--soft模式以外的任何其他模式),這兩種模式都不是git branch也不是git update-ref

相關問題