46

我克隆了一个 git repo,然后开始在它的 master 分支中玩耍。过了一会儿,我想忽略我刚刚所做的更改(不提交它们),并切换到不同的分支。但是,它阻止我切换,因为有未提交的更改。我如何在不隐藏它们的情况下忽略它们?这就是发生的事情:

$ git checkout gh-pages
error: Your local changes to the following files would be overwritten by checkout:
        somefile.txt
Please, commit your changes or stash them before you can switch branches.
Aborting
4

9 回答 9

73

选项1

git checkout -f gh-pages

选项 2

git reset --hard     # beware: don't make that a habit
git checkout gh-pages
于 2011-09-18T18:17:58.803 回答
12

只是为了完整起见,以及那些通过搜索登陆这里的人:虽然 OP 专门要求没有 stash 的解决方案但值得一提的是 stash 确实是一个非常好的选择:

该命令保存您的本地修改并恢复工作目录以匹配 HEAD 提交。

所以你可以简单地

git stash

这就像重置到 HEAD。当绝对肯定这些未提交的更改确实毫无价值时,只需

git stash drop

如上面的文档链接中所述,您甚至可以拥有多个存储区等。

我会推荐这种做法,因为它让人们养成在重置前三思而后行的习惯,而无需付出高昂的代价。

于 2015-11-30T15:15:46.520 回答
6

您可以忽略所有未提交的更改。

git reset --hard HEAD

于 2011-09-18T18:17:20.273 回答
3

如果您确实确定要丢弃未提交的更改(即那些已暂存的更改以及工作树中的更改),您可以执行以下操作:

git reset --hard

一般来说,存储通常更安全

于 2011-09-18T18:17:42.027 回答
3

如果您有未暂存的文件,请尝试:

git checkout -- .

或者

git checkout -- filename
于 2014-09-22T03:34:12.203 回答
0

Blockquote 选项 2 对我不起作用,它只是重复错误。

我也一样。在 git reset --hard + git checkout 之后,我仍然遇到同样的错误。

我已经通过在第二个命令上添加 --force 来修复它,就在硬重置之后。

git reset --hard
git checkout -f <branch name>
于 2020-08-28T11:36:08.733 回答
0

您可以放弃在特定文件中所做的更改:

git checkout somefile.txt

然后顺利跳转到分支:

git checkout gh-pages
于 2017-02-23T13:09:22.513 回答
0

git add -A git stash

这将清除您所做的所有更改(仅那些未提交的更改)

于 2017-01-19T15:42:02.153 回答
0

忽略但不删除更改

OP 要求忽略更改 - 但不要求删除它们。听起来像 OP 希望改变仍然存在。因此,此答案适用于那些处于类似情况且不想丢失更改的人。

鉴于已经遇到的限制,再加上您想保留这些更改,一种选择是将它们放在另一个分支中

无论您在哪里有未提交或分阶段的更改,您都可以随时创建一个分支

git checkout -b new_branch

然后git add根据git commit需要。现在您可以随意切换到其他分支,知道这些更改已保存。

像 OP 一样,我不喜欢使用 stash 和 pop(和樱桃挑选),但通过将它们放入一个新分支来隔离这些更改,然后我可以合并和重新设置基础,这对我来说效果很好。使用分支解决方案对我来说很容易

于 2020-08-28T11:57:25.953 回答