【问题标题】:git reset --hard doesn't work after adjusting the Headgit reset --hard 调整 Head 后不起作用
【发布时间】:2019-12-31 13:23:51
【问题描述】:

当我使用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")

【问题讨论】:

  • 你能粘贴git status的结果吗?
  • “我不能做git reset --hard”和“git reset --hard什么都不做”不同,第一个意思是你不能使用那个命令是有原因的,第二个是你试过了使用该命令,它并没有做你期望它做的事情。你能解释一下是哪一个吗?此外,git reset --hard 通常需要被告知您希望它重置的内容。你这样做了吗?
  • @LasseVågsætherKarlsen 是的 git reset --hard 什么都不做。我想重置所有更改,因此无需指定特定文件。
  • 问题中缺少您将其放在 Dropbox 下的事实!
  • @torek 你是对的。我完全没想到。

标签: git git-reset


【解决方案1】:

根据您的描述,我了解您希望取消所有更改。 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 消失。

【讨论】:

  • 我设法删除了这些文件。但仍然无法取消删除已删除的文件。命令git checkout -- . 在运行时会带回未跟踪的文件。就像被删除的文件没有被跟踪一样!。
  • 现在我意识到文件夹名称的末尾有空格......我从来没有遇到过这样的问题(我遵循规则以避免路径中的空格)所以下面的解决方案只是我的猜测: rm -r Muqeem/Modules/Muqeem/Slide\ Down\ \(Whitespace\ Conflict\)/ rm -r Muqeem/Modules/Muqeem/Tabs/Swiping\ Controller\ \(Whitespace\ Conflict\)/ git add Muqeem/Modules/Muqeem/Slide\ Down/ git add Muqeem/Modules/Muqeem/Tabs/Swiping\ Controller/ git commit -a -m "Fixed problems with spaces at the ends of folders" 如果你可以创建一个新的提交,试试这个(先复制 repo)。
【解决方案2】:

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

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

让我们分解一下吧。

要摆脱(未)分阶段的更改,请运行 git reset --hard。这会丢弃对跟踪文件的更改。

现在,当我们运行 git status 时,我们仍然会看到未跟踪的文件。但此时,我们应该可以切换分支了。当您切换到您的分支并运行 git status 时,那里应该什么都没有,除了那些未跟踪的文件。

最后,如果你想删除它们,你可以手动删除它们,或者使用专门为此设计的命令:运行git clean -nd - 这将执行“试运行”,列出所有文件已删除(我总是喜欢做空运行,这样我就不会做任何令人遗憾的事情,-d 将删除未跟踪的目录以及未跟踪的文件)。如果您对输出感到满意,请真正运行它:git clean -df-f 用于强制,在大多数情况下默认情况下是必需的)。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这应该是意料之中的。 Dropbox 尝试控制文件(因为它们在多台机器上共享)。 Git 尝试控制文件(毕竟它是一个版本控制系统)。您希望谁赢得这场控制权之战,为什么?让你的档案像这样进行 MMA 笼战是否明智? :-)
    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2010-09-05
    • 2011-02-09
    相关资源
    最近更新 更多