2008-11-02 92 views
3

我問這個的原因是我不小心做了一個git commit -a,其中包含一個我還不想提交的文件。我的解決辦法是做到以下幾點:有沒有辦法將特定版本的文件添加到git索引?

git reset --soft HEAD^ 
git reset -- file/with/changes_not_to_committed 
git commit -C [email protected]{1} 

這裏,我倒回由一個分支提交,同時保持索引和工作樹,然後拉file/with/changes_not_to_committed從一個又舊版本到索引,然後我犯該索引使用來自先前分支頭提交的提交消息。 git-reset調用都不會觸及工作副本,因此我對file/with/changes_not_to_committed的修改仍然存在,但不會再記錄在HEAD修訂版中。

但是,它會一直,如果我可以拉從HEAD^修訂file/with/changes_not_to_committed對進入指數不接觸工作副本容易。由於該指數以其他方式已經代表我想要的狀態,然後我可以只修改HEAD犯,產生這樣的順序:

git magic-pony HEAD^ file/with/changes_not_to_committed 
git commit --amend -C HEAD 

這是幾乎什麼,我會用git-checkout更換git-magic-pony,除了得到要求保持工作副本不變,只更新索引。看起來沒有辦法使git-checkout不能同時觸及兩者。

我的問題是:確實存在git-magic-pony,如果是的話,下是什麼名字?

回答

4

權。當你想將修訂版本從HEAD或其他版本移動到索引時,你可以使用'git reset REVISION - file' - 然後,你可以使用'git commit --amend'來修改提交。正如它發生,我目前正在進行審查,旨在使文件如何從A到B這樣更明顯。

當然,更簡單的方法是啓動'git-gui',單擊'修改上次提交'按鈕,然後在gui的提交清單部分點擊文件圖標,然後'提交」。

+0

謝謝!這正是我所期待的。不過,我不同意GUI的使用。 :-)也許更容易發現。 – 2008-11-03 12:09:17

2

看起來你可以使用git update-index做這樣的事情:

git update-index --cacheinfo 100644 5be7e154c284fb8de8ddca0bb18b72a73089df9b filename 

您將需要得到你想要回去的文件模式(如上100644)和SHA1(你可以得到這個信息全部來自git ls-tree)。那麼你可以git commit --amend和你的工作副本不會受到影響。

2

因此,基於格雷格Hewgill的回答,git-magic-pony是一個shell腳本我會寫它看起來像這樣:

​​
相關問題