Answers:
更新(几年后)
仅将其从索引中删除很简单。
正确:您可以很容易地将文件重置为其索引内容,正如最近的回答(由Matt Connolly编写)所建议的那样:
git reset HEAD^ path/to/file/to/revert
HEAD^
允许文件在上一次提交之前访问上一次提交中的内容。
然后,可以git commit --amend
像我最初在下面写的那样。
在Git 2.23(2019年8月)中,您可以使用新git restore
命令
git restore --source=HEAD^ --staged -- path/to/file/to/revert
较短:
git restore -s@^ -S -- path/to/file/to/revert
同样,您可以git commit --amend
按照我最初在下面的内容进行操作。
原始答案(2011年1月)
如果这是您的最后一次提交(并且尚未将其推送到任何地方),则可以对其进行修改:(
第一次存储或保存b
)
git commit --amend
然后删除b,重新提交。还原b,您就完成了。
--amend
用于修改当前分支的尖端。
像往常一样准备要替换最新提交的树对象(这包括常用的-i / -o和显式路径),并且提交日志编辑器中包含来自当前分支尖端的提交消息。
您创建的提交将替换当前提示(如果是合并,则它将当前提示的父级作为父提示),因此当前的顶级提交将被丢弃。
git diff --name-only HEAD^
-(可选)用于列出上次提交中更改的文件。git reset HEAD^ path/to/file/to/revert
-将索引重置为该最新版本,而保持工作副本不变。git commit --amend
-修改最后一次提交以包括索引更改git commit -a --amend
在第3步中使用(即不添加文件),否则您将提交工作副本更改,这些更改就是您要删除的编辑。可选步骤2.5也可以git checkout path/to/file/to/revert
是清理工作副本。
git rm --cached path/to/file/to/revert
可以取消添加文件而不将其从树中删除。
如果您想从上一次提交中删除b
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
如果要删除上一次提交中对b的所有更改
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
git rm --cached
并取消备份/还原舞蹈(-1)。
... Then stash/delete b, re-commit..
,这个词不应该Then
是after
吗?---amend
后STACH /删除B,...