当我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")
答案 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
正常工作。