2015-04-20 28 views
0

我有類似這樣的情況: 關於分支設計決策。Git如何在不破壞當前提交的情況下創建基於HEAD〜1的新提交

最新承諾:

Design Option 2 
Design Option 1 

我要籤承諾「的設計方案1」,並用它來創建提交「設計方案3」。 我不想丟失或修改提交'設計選項1'或'設計選項2'。

我知道,我可以檢查出提交的設計方案1與此命令:

git checkout HEAD~1 

然後,我得到這個消息:「你現在在‘分離的頭’的狀態。」

這並不真正有用,因爲我不明白拆分HEAD有什麼大不了的。

爲什麼我不能像平常一樣從分離的頭上工作? 爲什麼不能這樣工作?

// Make changes 
git add . 
git commit -m "Design Option 3" 
git push 

我寧願不創造新的分支,只是告訴混帳閉嘴,創造新的從這個分離的頭的狀態承諾,而合併的東西等等。

如何使它工作?

+0

一旦你簽出另一個分支,你認爲你會如何訪問你在分離頭上添加的提交? – chepner

+0

我真正想要的是在頭後添加該提交。像git commit -hm「Message」,其中-h表示添加此提交,就好像在此分支上最後一次提交時head未分離一樣。 –

+0

Git中的HEAD只是對分支的符號引用;向分離的頭添加提交使其無法從任何其他分支訪問。當你說「在這個分支上添加這個提交...」時,當你有一個分離的頭部時,*是*沒有「這個分支」。 – chepner

回答

4

爲什麼我不能像平常一樣從分離的頭上工作?爲什麼這不工作?

因爲推送不知道推送什麼(哪個提交以及遠程端的哪個分支)。
請參閱「Why did my Git repo enter a detached HEAD state?」。

最好創建一個新的分支,在其上工作並推送它。

git checkout -b newBranch HEAD~1 
# work 
# Make changes 
git add . 
git commit -m "Design Option 3" 
git push -u origin newBranch 
1

當您嘗試針對系統/軟件/任何工作時,您將遇到困難。 Git也不例外。分支是解決你的問題的方法,而且它們很便宜(少了幾百字節?)所以:就用它們吧。從

0

結帳文件提交這樣

git checkout HEAD~1 -- . 

從HEAD〜1使命令結帳文件,並在索引把這些。它不會造成分離頭部狀態。 git checkout可以檢出提交和分支,也可以檢出文件。如果從特定提交中檢出文件,需要區分文件並提交 - ,之前提交和之後的文件(在這種情況下,代表當前目錄中的所有文件)

但是,解決您的問題真的是使用分支對於不同的設計

+0

- 代表什麼?什麼。代表?這個命令做什麼? –

+0

- 從文件中分離出refs/commits/branches,。說當前目錄中的'所有文件' –

+0

我不明白這個部分「 - 分隔refs /提交/分支從文件」。你的意思是如果你想在同一個命令中指定提交和文件,你必須用 - 分隔它。這與我寫的有什麼不同? 'git checkout HEAD〜1'?你是說你的命令不會造成獨立的頭腦? –

相關問題