git reset --hard在调整Head后不起作用

时间:2019-08-27 11:07:42

标签: git git-reset

当我git reset --hard放弃当前工作副本中的更改时,什么也不会被丢弃。

这是我在解决此问题之前所做的事情: 我将Head移回了3次提交 git reset HEAD~3 然后我想回到最新的提交,我认为这可以做到 git checkout - 实际上,完成的工作是通过不需要的更改签出开发分支。 现在,我想返回上一个分支而不提交这些更改,但是由于这些更改,我无法切换分支。 git reset --hard不执行任何操作。 A还试图隐藏更改,将其隐藏起来,但是工作副本不会删除我工作副本中的更改。

编辑: 这是git status的输出:

On branch development
Your branch is up to date with 'origin/development'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    Muqeem/Modules/Muqeem/Slide Down /SlideDownViewController.swift
    deleted:    Muqeem/Modules/Muqeem/Slide Down /SlideDownViewController.xib
    deleted:    Muqeem/Modules/Muqeem/Tabs/Swiping Controller /PageCollectionViewCell.swift
    deleted:    Muqeem/Modules/Muqeem/Tabs/Swiping Controller /SwipingViewController.swift
    deleted:    Muqeem/Modules/Muqeem/Tabs/Swiping Controller /SwipingViewController.xib

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    Muqeem/Modules/Muqeem/Slide Down (Whitespace Conflict)/
    Muqeem/Modules/Muqeem/Slide Down/
    Muqeem/Modules/Muqeem/Tabs/Swiping Controller (Whitespace Conflict)/
    Muqeem/Modules/Muqeem/Tabs/Swiping Controller/

no changes added to commit (use "git add" and/or "git commit -a")

3 个答案:

答案 0 :(得分:0)

根据您的描述,我了解您希望所有更改都消失。 git status显示您有一些已删除的文件,也有一些未跟踪的文件。 您可以取消删除它们:

    deleted:    Muqeem/Modules/Muqeem/Slide Down /SlideDownViewController.swift
    deleted:    Muqeem/Modules/Muqeem/Slide Down /SlideDownViewController.xib
    deleted:    Muqeem/Modules/Muqeem/Tabs/Swiping Controller /PageCollectionViewCell.swift
    deleted:    Muqeem/Modules/Muqeem/Tabs/Swiping Controller /SwipingViewController.swift
    deleted:    Muqeem/Modules/Muqeem/Tabs/Swiping Controller /SwipingViewController.xib

通过执行git checkout -- .

那些未跟踪的对象不由git处理,因为它们未添加到其中。如果您要rm -r Muqeem/Modules/Muqeem/Slide\ Down\ (Whitespace\ Conflict)(依此类推),可以手动删除它们,它们将从git status中消失。

答案 1 :(得分:0)

如果我的理解正确,那么您想摆脱git status输出中当前存在的更改,并且想要切换到分支。

当您取消暂存工作目录中存在的跟踪文件的更改时,Git会抱怨切换分支。当您的工作目录中存在未跟踪的文件时,Git不会不会抱怨切换分支。

所以让我们分解一下。

要摆脱(取消)暂存的更改,请运行git reset --hard。这将放弃对跟踪文件的更改。

现在,当我们运行git status时,我们仍然会看到未跟踪的文件。但是在这一点上,我们应该能够切换分支。当您切换到分支并运行git status时,那里应该没有任何内容,对于那些未跟踪的文件,除了

最后,如果要删除它们,可以手动删除它们,也可以使用为此设计的命令:运行git clean -nd-这将进行“空运行”,列出所有文件会被删除(我总是更喜欢试运行,以免做任何令人遗憾的事情,-d除了删除未跟踪的文件之外,还会删除未跟踪的目录)。如果您对输出感到满意,请对其进行实际运行:git clean -df-f是强制性的,默认情况下在大多数情况下是必需的。)

答案 2 :(得分:0)

出乎意料的是,罪魁祸首是Dropbox。 从Dropbox移出我的项目后,git reset --hard正常工作。