2008-11-02 93 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脚本我会写它看起来像这样:

​​
相关问题