我错误地拉了一个不同的分支并做了git reset HEAD@{1}
撤消它。现在,当我输入git status
时,我从我提取的分支中获取了一个未跟踪和修改过的文件的大量列表。
如何从暂存中删除它们以便我不必提交它们?
答案 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
进行恢复。