在中止git中的当前更改后切换分支

时间:2011-09-18 18:15:36

标签: git git-branch git-stash

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

$ 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

9 个答案:

答案 0 :(得分:64)

选项1

git checkout -f gh-pages

选项2

git reset --hard     # beware: don't make that a habit
git checkout gh-pages

答案 1 :(得分:12)

只是为了完整性,以及那些通过搜索来到这里的人:尽管OP专门要求没有stashing的解决方案,但值得一提的是,存储确实是一个非常好的选择:

  

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

所以你可以简单地

git stash

这就像重置为HEAD一样。当绝对肯定地确定那些未提交的变更确实毫无价值时,只需

git stash drop

您甚至可以在上面的文档链接中提到多个藏匿处等。

我会推荐这种做法,因为它会让人习惯于在重置之前进行双重思考,而不需要花费很多费用。

答案 2 :(得分:5)

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

git reset --hard HEAD

答案 3 :(得分:3)

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

git reset --hard

一般来说,藏匿通常更安全

答案 4 :(得分:3)

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

git checkout -- .

或者

git checkout -- filename

答案 5 :(得分:0)

git add -A git stash

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

答案 6 :(得分:0)

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

git checkout somefile.txt

然后顺利跳到分支机构:

git checkout gh-pages

答案 7 :(得分:0)

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

对我来说也是一样。 git reset --hard + git checkout后,我仍然遇到相同的错误。

我通过在硬重置后立即在第二个命令上添加--force来解决此问题。

git reset --hard
git checkout -f <branch name>

答案 8 :(得分:0)

忽略但不删除更改

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

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

无论您在何处进行未提交或已进行的更改,都可以始终使用

新建分支

git checkout -b new_branch

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

像OP一样,我不喜欢使用隐藏和弹出(和选择樱桃)功能,而是通过将这些更改放到新的分支中来隔离这些更改,然后我可以合并它们并对其进行基础调整对我来说效果很好。使用分支机构解决方案对我来说很容易