簡體   English   中英

當head為*時,如何將更改提交到分支 <tag> )”

[英]How to commit changes to a branch when head is “* (detached from <tag>)”

我想提交更改並將其推送到遠程,但是我與標簽分離。 我該如何僅使用標簽的名稱並形成git命令,以重新附加與之分離的頭部,然后提交並推送到遠程?

我該如何將頭從[...]拆下,重新安裝?

git branch的輸出為

* (detached from <tag>)
  <possibly other branches...>

表示您已經運行了git checkout <tag> 您的情況如下

在此處輸入圖片說明

HEAD指向的不是分支,而是直接指向提交(標記<tag>也指向該提交,但僅次於該提交):您處於分離HEAD狀態。 要重新連接HEAD,您需要使其指向分支,可以通過運行

git checkout <branch-in-question>

但是,如果您的工作狀態不干凈,Git通常會阻止您檢出分支。 那就是藏起來很方便的地方。 存放類似於通過將放在桌子上的所有物品暫時放在抽屜中來整理桌子,只是在以后需要時才將其取回。

在這里,你應該跑

git stash save
git checkout <branch-of-interest>
git stash pop

解決由最后一條命令引起的任何沖突。 在上面的示例中,您的存儲庫將如下所示:

在此處輸入圖片說明

在工作樹中進行本地更改。 然后,您可以進行這些更改,提交並推送到遠程。

除了Jubobs'(正確)的答案 ,這是值得注意的是git的記錄HEAD在Git的更新引用日志HEAD

您可以簡單地運行git reflog (沒有額外的參數)來查看類似的內容(您的時間可能更長):

9b7cbb3 HEAD@{0}: checkout: moving from master to v2.2.1
c5b9256 HEAD@{1}: checkout: moving from maint to master
c2e8e4b HEAD@{2}: checkout: moving from master to maint
c5b9256 HEAD@{3}: merge refs/remotes/origin/master: Fast-forward
c18b867 HEAD@{4}: clone: from git://github.com/git/git

這顯示了我在git本身的源克隆中所做的所有動作。 您可以看到我做了一個git checkout maint ,然后是git checkout master ,然后是git checkout v2.2.1以達到我當前的“分離式HEAD”狀態。 這里v2.2.1是一個標記。 回到以前的分支,我可以簡單地看到reflog指出我是“從master”遷移的,所以我只需要:

git checkout master

我將回到分公司主管。

(請注意,如果我在此處進行了一些新的提交,這會“丟失”它們,除了我可以在引用日志中再次找到它們。此外,如果我對工作目錄進行了更改,則git checkout master步驟可能會抱怨更改為分支master會丟失我的更改。在這種情況下,提交,存儲和/或創建新分支通常是正確的選擇。

我將在您所在的位置創建一個分支,提交更改,簽出master,然后將新分支合並到master。

git branch my-temporary-branch
git commit -m "my temp work"
git checkout master
git merge my-temporary-branch
git branch -d my-temporary-branch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM