Git:撤消git pull后删除未分级的更改?

时间:2017-03-15 10:14:14

标签: git git-pull git-reset

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

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

2 个答案:

答案 0 :(得分:2)

您想要的命令是

git reset --hard

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

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

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

git clean -n

将做一个干跑并告诉你它会删除什么。除非你以其他方式进行设置,否则你可能需要提供-f强制标志以使其实际删除文件。

小心git clean,因为这些文件没有跟踪,所以无法取回你意外删除的文件。

答案 1 :(得分:1)

我会在@ SpoonMeiser的回答中进行硬重置,但我不会对reflog进行硬重置。 reflog很特别 - 我们可能需要咨询它,但我们不应该在日常的git使用中重置它。

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

git reset --hard 46c80011b9845548000f8ed2178755d28c5e6832

或者哈希是什么。

您应该可以通过git log找到哈希值。如果pull执行了合并,则最近的提交将是合并。 git log的输出如下所示:

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进行恢复。