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
。
我错误地拉了一个不同的分支并做了 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
。