如何修改最后一次提交以取消添加文件?

如何修改最后一次提交以取消添加文件?

我在上次提交中修改了两个文件a。但文件不应该被提交,修改它的工作流程是什么?bb

答案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

  1. git diff --name-only HEAD^- (可选)用于列出上次提交中更改的文件。
  2. git reset HEAD^ path/to/file/to/revert- 重置指数保留最后一个版本,工作副本保持不变。
  3. 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准确地弄清楚我想要提交什么。

相关内容