2016-05-12 39 views
4

使用git我想進入分離的HEAD狀態並創建一個新的提交。然後,我想創建一個標籤,並將「分離的提交」和標籤都推送到遠程倉庫。這可能嗎?我可以推送提交在分離HEAD狀態

如果我在我的本地倉庫中創建分離的提交併創建一個標籤,那麼我可以檢出標籤以恢復到該狀態。我想與遠程repo分享,以便其他用途可以克隆repo並簽出標籤並達到相同的狀態。

我想這樣做的原因是因爲構建過程需要捕獲文件中的構建#但我不想將其提交給開發正在進行的分支。我希望提交是分開的,但也希望捕獲提交併對其進行標記,以便任何人都可以簽出構建中包含的標記和文件。是否推薦將提交推送到不同的分支,比如說「build」?

+0

這有什麼錯只是檢查出的一個新的分支? –

+0

'git push --tags' –

+0

@JiriKremser:也可以工作,但會推送* all *標籤,這可能比預期的要多。 – torek

回答

6

是的,this-by「this」我的意思是主要問題,「你可以推送一個帶標籤的但不包含分支的提交嗎?」 - 非常好。請注意,git push通過調用其他一些Git(例如,ssh:// ...或https:// ...通過Internet電話調用另一個Git),並在必要時提交一些提交,以及然後問其他Git:「請設置一個引用名稱來指向某些特定的提交」。

既然你有一個標籤,你可以問其他Git請設置相同的標籤。假設遠程命名origin(因爲它通常是):

git push origin <tag> 

可以拼出全名,refs/tags/tag,如果需要的話。如果標籤名稱很容易與分支名稱區分開來(例如,標籤是,分支從不以v開頭),它永遠不會被需要(但它通常可能是明智的)。

如果你沒有標籤,你仍然可以這樣做,但你必須提供其他Git 名稱。要做到這一點,你會做這樣的事情:

git push origin HEAD:refs/heads/newbranch 

或:

git push origin HEAD:refs/tags/newtag 

這裏棘手的一點是,在推動過程中,你不知道他們是否有一個分支newbranch或標籤newtag已經。如果你自己設置了一個標籤,並且一直從它們那裏取得標籤,那麼你可能有一個好主意 - 當然不是保證 - 它們也沒有那個標籤。

需要注意的是,如果他們有名字,你禮貌地要求他們改變他們的名字指向一些其他承諾,他們可能會拒絕。這是當你看到rejected錯誤推。你可以命令它們(在refspec中使用git push --force+前綴語法),但這通常不是正確的方法,而且它們仍然可以拒絕(該部分取決於控制其他Git的人)。

0

git tag mytag git push origin mytag:mytag 這裏mytag:mytag相當於裁判/標籤/ mytag:裁判/標籤/ mytag

相關問題