更改为主分支时出错:我的本地更改将被checkout覆盖

这个问题与此类似,但更具体。

我有两个分支( stagingbeta )的项目。

我在staging开发,并使用master分支来修复错误。 所以,如果我正在分期工作,我看到一个错误,我改成master分支:

 git checkout master 

并做的东西:

 git add fileToAdd git commit -m "bug fixed" 

然后我与两个分支合并:

 git checkout staging git merge master git checkout beta git merge beta 

如果工作树上有其他文件,则无关紧要。

但是现在, 当我尝试更改master分支时,出现错误

 error: Your local changes to the following files would be overwritten by checkout: src/Pro/ConvocationBundle/Controller/DefaultController.php Please, commit your changes or stash them before you can switch branches. Aborting 

我以为我应该从临时区域删除文件:

 git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php 

但我得到同样的错误。 如果我做git status我得到No changes to commit

当您修改了一个文件,并且您正在切换到的分支也对该文件进行了更改(从最新的合并点开始),则会显示您的错误。

你的select,正如我所见,是 – 提交,然后修改这个提交额​​外的变化(你可以修改提交git,只要他们不push )。 或者 – 使用隐藏:

 git stash save your-file-name git checkout master # do whatever you had to do with master git checkout staging git stash pop 

git stash save将创build包含您的更改的存储,但它不与任何提交或甚至分支关联。 git stash pop将最新的藏匿条目应用到您当前的分支,恢复保存的变化,并从藏匿中删除。

我遇到了同样的问题,并通过解决

 git checkout -f branch 

其规格比较清晰

-f,–force

切换分支时,即使索引或工作树与HEAD不同,也要继续。 这是用来丢弃本地更改。

从索引检出path时,不要在未合并的条目上失败; 相反,未被合并的条目被忽略。

如果您不想提交本地更改,则可以强制检出分支。

 git checkout -f branch_name