Git:撤消 git 拉取后删除未暂存的更改?

Git: Remove unstaged changes after undoing a git pull?

我错误地拉了一个不同的分支并做了 git reset HEAD@{1} 撤消它。现在,当我输入 git status 时,我会从我拉取的分支中得到一个巨大的未跟踪和修改文件列表。

如何将它们从暂存中删除以便我不必提交它们?

你想要的命令是

git reset --hard

--hard 标志告诉 git 不仅要移动 HEAD,还要将本地文件重置为提交时的状态。

这只会重置跟踪文件的更改,如果您在初始重置时使用 --hard 撤消拉取,则拉取引入的任何新文件都将被删除,但如果您已完成软重置,拉动引入的新文件仍将存在,但您的 HEAD 将是未跟踪这些文件的提交。

要从工作副本中删除未跟踪的文件,用户 git clean

git clean -n

将做一个干燥-运行 并向您展示它将删除的内容。除非您以其他方式设置它,否则您可能需要提供 -f 强制标志以使其真正删除文件。

注意 git clean,因为这些文件未被跟踪,无法取回您意外删除的文件。

我会像@SpoonMeiser 的回答那样进行硬重置,但我不会对 reflog 进行硬重置。 reflog 很特殊 - 我们可能需要查阅它,但我们不应该在日常 git 使用中重新设置它。

相反,我会在您拉取之前找到您分支的最后一次提交,然后执行:

git reset --hard 46c80011b9845548000f8ed2178755d28c5e6832

或任何哈希值。

您应该能够通过 git log 找到哈希。如果拉动执行合并,则最近的提交将是合并。 git 日志的输出如下所示:

commit eddb8b70c9167cf88653d7649f054c0d69a5ee8a
Merge: a89faff 980a815
Author: jwg <jwg@example.com>
Date:   Wed Mar 15 10:22:16 2017 +0000

    Merge branch 'some_random_remote_branch' of git_server:foo/bar into my_precious_local_branch

第二行显示了合并的两个提交。其中一个是远程分支,一个是my_precious_local_branch,你应该能找到是哪个。

如果最后一次提交不是合并提交,则拉取是快进。这意味着您的本地分支上没有任何不在远程分支上的东西。但是,您可能仍希望恢复本地分支机构。您可以通过 git log 并准确决定要还原哪个提交,然后对其执行 git reset --hard