[英]Switching a branch after aborting current changes in git
我克隆了一个 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
选项1
git checkout -f gh-pages
选项 2
git reset --hard # beware: don't make that a habit
git checkout gh-pages
只是为了完整起见,并为那些谁降落在这里通过搜索:虽然OP的解决方案明确要求没有藏起来,值得一提的是,藏匿确实是一个非常不错的选择:
该命令保存您的本地修改并恢复工作目录以匹配 HEAD 提交。
所以你可以简单地
git stash
这就像重置为 HEAD。 当绝对肯定那些未提交的更改确实毫无价值时,只需
git stash drop
如上面的文档链接中所述,您甚至可以拥有多个 stash 等。
我会推荐这种做法,因为它使人们养成在重置之前三思而后行的习惯,而无需花费大量成本。
您可以忽略所有未提交的更改。
git reset --hard HEAD
如果您有未暂存的文件,请尝试:
git checkout -- .
要么
git checkout -- filename
如果您真的确定要丢弃未提交的更改(即那些已暂存的更改以及工作树中的更改),您可以执行以下操作:
git reset --hard
一般来说,藏匿通常更安全
git add -A git stash
这将清除您所做的所有更改(仅那些未提交的更改)
您可以放弃在特定文件中所做的更改:
git checkout somefile.txt
然后顺利跳转到分支:
git checkout gh-pages
Blockquote Option 2 对我不起作用,它只是重复错误。
我也一样。 在 git reset --hard + git checkout 之后,我仍然遇到同样的错误。
我通过在硬重置后立即在第二个命令上添加 --force 来修复它。
git reset --hard
git checkout -f <branch name>
OP 要求忽略更改 - 但不要求删除它们。 听起来 OP 希望更改仍然存在。 所以这个答案适用于那些处于类似情况、不想丢失更改的人。
鉴于已经遇到的限制,再加上您想保留这些更改,一个选择是将它们放在另一个分支中
无论您在何处进行未提交或暂存的更改,您始终可以使用以下命令创建新分支
git checkout -b new_branch
然后根据需要git add
和git commit
。 现在您可以随意切换到其他分支,知道这些更改已保存。
像 OP 一样,我不喜欢使用 stash 和 pop(和cherry pick),但是通过将这些更改放入一个新分支来隔离这些更改,然后我可以合并和重新设置基准,对我来说效果很好。 使用分支解决方案对我来说很容易
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.