繁体   English   中英

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

[英]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 addgit commit 现在您可以随意切换到其他分支,知道这些更改已保存。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM