如何从git索引中删除修改过的文件,并在一个步骤中放弃修改?

如何从git索引中删除修改过的文件,并在一个步骤中放弃修改?,git,git-index,Git,Git Index,我最近对错误的分支执行了一次草率的大提交。我决定,我希望提交的更改位于不同的分支上,并可能将大提交拆分为几个较小的提交。我执行了一个git cherry pick-n,如所示。这导致了我当前分支中的一系列阶段性更改。我知道我不需要这些改变。所以我想知道:有没有办法从索引中删除一个修改过的文件,然后在一个步骤中丢失更改?我看到的大多数解决方案都需要一个git重置,然后是一个git签出--path/to/file我最后做的是一个git签出头--path/to/file,据我所知,它将文件替换为头提交

我最近对错误的分支执行了一次草率的大提交。我决定,我希望提交的更改位于不同的分支上,并可能将大提交拆分为几个较小的提交。我执行了一个git cherry pick-n,如所示。这导致了我当前分支中的一系列阶段性更改。我知道我不需要这些改变。所以我想知道:有没有办法从索引中删除一个修改过的文件,然后在一个步骤中丢失更改?我看到的大多数解决方案都需要一个
git重置
,然后是一个
git签出--path/to/file

我最后做的是一个
git签出头--path/to/file
,据我所知,它将文件替换为头提交树中的文件,而不是先签入索引

我没有参考
git
手册页就提出了这个解决方案,但是感谢@torek指出了手册页。这是我使用的第五种
git checkout
,如下所示:

git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>...
git签出[-p|--patch][[-]。。。
该表格的部分文档说明:

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.
该参数可用于指定特定的树ish(即提交、,
标记或树),以在更新工作之前更新给定路径的索引
树。

因此,实际发生的情况是:git将索引中的文件替换为HEAD中的版本(有效地从索引中删除文件),然后将工作树中的文件替换为索引中的版本,从而消除了更改。

将文件的工作副本替换为树中的版本,在不影响指数的情况下。问题中的
git reset--
步骤会影响索引(撤消挂起的更改),而不会影响工作副本。这就是为什么其他答案说两者都要做。如果希望索引受到影响,则需要进行
git重置
,或者可以
git在
git签出
后添加文件(替换索引中修改的文件)。不管怎样,这都是两个命令。这个命令确实对我有用。我甚至在点击“回答你自己的问题”框之前又试了一次。这是git 1.7.5.4(我知道很旧)。嗯,很有趣。1.7.5.4没有那么古老。。。再次阅读手册页,我看到:“参数可以用来指定一个特定的树ish(即提交、标记或树),以便在更新工作树之前更新给定路径的索引。”所以我错了,这会更新索引。感谢指向文档的指针@torek。我已经用这些信息更新了答案。