我最近对错误的分支执行了一个草率的大提交。我决定我希望将更改提交到不同的分支,并可能将大提交分成几个较小的提交。我按照this answer的指示执行了git cherry-pick -n
。这导致我当前分支中的一系列分阶段更改。我知道我不需要其中一个改变。所以我想知道:有没有办法从索引中删除修改后的文件并在一个步骤中丢失更改?我见过的大多数解决方案都需要git reset
后跟git checkout -- path/to/file
。
答案 0 :(得分:3)
我最终做的是一个git checkout HEAD -- path/to/file
,据我所知,它用HEAD提交树中的文件替换了文件,而不是先检查索引。
我在没有咨询git
手册页的情况下提出了这个解决方案,但感谢@torek指出了git-checkout(1)手册页。这是我使用的git checkout
的第五种形式,看起来像这样:
git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>...
该表格的部分文件说:
The <tree-ish> argument can be used to specify a specific tree-ish (i.e. commit,
tag or tree) to update the index for the given paths before updating the working
tree.
所以实际发生的是:git用HEAD中的版本替换索引中的文件(从索引中有效删除文件),然后使用索引中的版本替换工作树中的文件,从而消除了更改