在 Git 中撤消添加文件

Undo Add Files in Git

我在 git 的目录中有一堆文件未被跟踪。我犯了一个错误,先 git add . 然后 提交并推送 更改。我怎样才能回到在该提交之前未跟踪的文件再次未跟踪的位置,但仍在目录中(git reset --hard 删除了所有文件,对我不利,而不是再次取消跟踪它们)。我在不同位置有很多文件需要取消跟踪,所以 git reset <FILE> 对我不起作用。

$ git commit -m "Something terribly misguided"              (1)
$ git reset HEAD~                                           (2)
<< edit files as necessary >>                               (3)
$ git add ...                                               (4)
$ git commit -c ORIG_HEAD 
  1. 这是您要撤消的内容
  2. 这会使您的工作树(磁盘上文件的状态)保持不变,但会撤消提交并使您提交的更改未暂存(因此它们将在 git 状态下显示为 "Changes not staged for commit"并且您需要在提交之前再次添加它们)。如果你只想对之前的提交添加更多更改,或者更改提交消息1,你可以使用 git reset --soft HEAD~ 代替,这就像 git reset HEAD~ 但保留你现有的更改已上演。
  3. 更正工作树文件。
  4. git 添加您想要包含在新提交中的任何内容。
  5. 提交更改,重新使用旧的提交消息。 reset 将旧的 head 复制到 .git/ORIG_HEAD;使用 -c ORIG_HEAD 提交将打开一个编辑器,该编辑器最初包含来自旧提交的日志消息并允许您对其进行编辑。如果不需要编辑消息,可以使用 -C 选项。

来源: How to undo last commit(s) in Git?

首先,您应该通过 :

将最后一次提交和 return 所有文件恢复到暂存区
git reset --soft HEAD~1

这不会删除任何文件,而且很安全。

然后,您可以删除所有添加到暂存区的文件:

git reset

现在,如果您 运行 git status,您可以看到所有文件都未暂存。

然后您可以 git add 您想要的唯一文件。