我在上次提交中修改了两个文件a
。但文件不应该被提交,修改它的工作流程是什么?b
b
答案1
更新(几年后)
仅将其从索引中删除是很简单的事情。
正确:你可以很容易地将文件重置为其索引内容,因为最近的答案(撰稿人马特·康诺利) 建议:
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 和显式路径),提交日志编辑器将使用当前分支尖端的提交消息进行播种。
您创建的提交将替换当前尖端 — 如果是合并,它将以当前尖端的父级为父级 — 因此当前顶级提交将被丢弃。
答案2
git diff --name-only HEAD^
- (可选)用于列出上次提交中更改的文件。git reset HEAD^ path/to/file/to/revert
- 重置指数保留最后一个版本,工作副本保持不变。git commit --amend
- 修改最后一条提交,以包括指数变化
答案3
或者,如果您正在使用git gui
,则只需选择“修改上次提交”选项,添加的文件将出现在“暂存”列表中,单击其图标将其移动到“未暂存”列表并提交。
答案4
另一种方法不需要索引黑客,但仍保留旧的提交消息:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
我喜欢它,因为 (a) 它使用我经常使用的命令,并且 (b) 我可以git add -p
准确地弄清楚我想要提交什么。