2016-10-20 23 views
1

我結束了一個奇怪的情況,我檢查了我的分支v4.1.0-rc12上的先前提交。我修改了一些文件,我想將它提交到v4.1.0-rc12分支。如何提交ditached頭模式下的文件到分支

現在HEAD指針處於分離模式,因爲我簽出了一個前一個提交,我該如何將此更改提交到分離模式的v4.1.0-rc12分支?

我希望我做了「恢復」而不是「簽出」提交哈希。

是否有任何可能的解決方案來提交編輯的文件並將其添加到我的v4.1.0-rc12分支?

這就是我的 「混帳引用日誌」 顯示

441bfac [email protected]{0}: commit: Resolved #110 
dc00e4f [email protected]{1}: checkout: moving from v4.1.0-rc12 to dc00e4f 
2542748 [email protected]{2}: commit: Login & SignUp revamp (Broken) 
dc00e4f [email protected]{3}: commit: Resolved #109 and #110 
4472914 [email protected]{4}: commit: Resolved #108 

我想441bfac保存到V4.1.0-RC12

任何幫助或想法,將不勝感激。

回答

2

方法1:

$ git checkout v4.1.0-rc12 branch 
(see if it succeeds, if so): 
$ git add ...  # if/as needed 
$ git commit 

可能無法工作,因爲git checkout步將拒絕切換到分支,如果(且僅當)表示開關會消滅你已經改變製作。

git checkout步驟將成功,並隨身攜帶您的更改,如果可以的話。

如果git checkout步驟成功,這是迄今爲止處理這一切的最簡單方法。如果不是,請繼續使用其他方法。


方法2(avi's answer):

$ git checkout -b tempbranch 
$ git add ...  # as and if needed 
$ git commit 

這(在-b tempbranch)創建一個新的,臨時黨支部指向上,你分開你的頭早些時候提交。該git commit然後創建這個臨時黨支部新的承諾:

  o--o--o <-- v4.1.0-rc12 branch 
     /
...--o--o 
     \ 
      o   <-- tempbranch 

現在你可以git checkout任何你喜歡的,並提交你tempbranch取得永久存儲在你的倉庫(當然,永久除非/直到你刪除名稱tempbranch),它使您可以隨時從其中複製內容。


方法3:

$ git stash 
$ git checkout v4.1.0-rc12 branch 
$ git stash apply # or even "git stash pop" but I prefer "apply" 
... check everything out ... 
... if it all looks right ... 
$ git stash drop  # "git stash pop" means "apply and then auto-drop" 

git stash做的是使一個提交(實際上提交)使不上任何分支。效果與製作臨時分支時的效果相同。這會導致在完成該操作時刪除非分支的問題,因此git stash drop會刪除包含提交的未命名非分支。

git stash apply步本質(雖然它比這更復雜)櫻桃挑選觸犯該git stash做,無論你在哪裏現在:所以這是像櫻桃採摘提交你tempbranch製造。

注意git stash pop自動調用git stash drop,即使git stash apply的結果是一個爛攤子,你失去了你的臨時提交,如果你pop但如果你apply。如果一切順利,沒有真正的區別,pop更方便;這只是一個更好的情況下bread-crumb trail萬一事情變糟。


(我個人的偏好,順便說一句,是方法1首先如果可能的話,通常2,然後是3,但有時,當我相信它去上班 - 我喜歡的方法3方法2 )

+0

很好的答案。謝謝!! –

2

首先,從您之前的提交中創建新分支,簽出到新創建的分支,更新您的文件並提交更改。 之後,您可以將更改合併到任何分支。

+0

如果我創建並簽出一個新的分支,我不會在分離模式下放鬆當前的工作嗎? –

+0

@SamuelRobert:不,git保證結帳是非破壞性的。它會保持未經修改的修改,或者如果由於衝突而不能結賬,則會拒絕結賬。請參閱[git結帳< branch >本地更改失敗](http://stackoverflow.com/questions/37450983/git-checkout-branch-failure-for-local-changes)的解釋。 – sleske

+1

是的,你會從分離的分支中丟失你目前的修改。首先在分離的頭部進行修改,然後從分離的頭部創建新的分支。 – avi

相關問題