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

时间:2014-03-15 13:01:08

标签: git git-checkout

此问题类似于this one,但更具体。

我有一个包含两个分支(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

8 个答案:

答案 0 :(得分:101)

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

解决了
git checkout -f branch

及其规范相当明确。

  

-f, - force

     

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

     

检查索引中的路径时,请勿在未合并时失败              项;相反,未合并的条目将被忽略。

答案 1 :(得分:90)

修改文件时出现错误,而您切换到的分支也会对此文件进行更改(从最新的合并点开始)。

我认为你的选项是 - 提交,然后通过额外的更改修改此提交(你可以修改git中的提交,只要它们不是push ed);或者 - 使用stash:

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将创建包含您的更改的存储,但它不与任何提交甚至分支相关联。 git stash pop会将最新的存储条目应用于您当前的分支,恢复已保存的更改并将其从存储中删除。

答案 2 :(得分:11)

如果您不想提交本地更改,可以强行结帐分支。

git checkout -f branch_name

答案 3 :(得分:3)

  

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

解决了      
    

git checkout -f分支

  

好吧,请注意search?type=placetopic&topic_filter=all开关。如果使用-f开关,则将丢失所有未提交的更改。尽管在某些情况下使用-f会有所帮助,但在大多数情况下,您可能需要-f进行更改,然后stash进行分支。上面介绍了switch过程。

答案 4 :(得分:2)

当您要切换的分支具有当前分支所没有的更改时,会发生此错误。

如果在尝试切换到新分支时看到此错误,则当前分支可能在一个或多个提交之后。如果是这样,请运行:

git fetch

您还应该删除可能也会与目标分支冲突的依赖项。

例如,对于iOS开发人员:

pod deintegrate

然后尝试再次签出分支。

如果所需分支不是新创建的,则可以选择提交并解决冲突,也可以存储更改,然后解决冲突。

1。 Git Stash(推荐)

git stash
git checkout <desiredBranch>
git stash apply

2。樱桃挑选(更多工作)

git add <your file>
git commit -m "Your message"
git log

复制提交内容。然后丢弃不必要的更改:

git checkout .
git checkout -- . 
git clean -f -fd -fx

确保您的分支机构是最新的:

git fetch

然后结帐到所需的分支

git checkout <desiredBranch>

然后樱桃选择另一个提交:

git cherry-pick <theSha>

现在解决冲突。

  1. 否则,您的另一选择是使用以下方法放弃当前分支更改
git checkout -f branch

答案 5 :(得分:0)

我遇到了同样的错误。实际上,我试图用新的更新包覆盖 Flutter 旧 SDK 包。所以发生了错误。

我用VS Code打开flutter sdk目录并清理项目

在 VSCode cmd 中使用此代码

git clean -dxf

然后使用 git pull

答案 6 :(得分:-1)

您可以在当前分支中提交,签出到另一个分支,然后最终选择该提交(代替合并)。

答案 7 :(得分:-1)

如果在尝试签出其他分支时收到此消息:

my-mac:myGHProject ~$ git checkout other-branch
error: Your local changes to the following files would be overwritten by checkout:
    src/main/resources/reference.conf

这意味着您需要在已检出的分支上进行一些更改,或者需要擦除或隐藏它们,就像上面提到的大多数一样。 20次中有19次我更有可能仅提交更改。

my-mac:myGHProject ~$ git branch
  * my-local-branch
  * develop    

my-mac:myGHProject ~$ git status
On branch my-local-branch
   Changes not staged for commit:
   (use "git add <file>..." to update what will be committed)
   (use "git checkout -- <file>..." to discard changes in working directory)
 modified:   src/main/resources/reference.conf

my-mac:myGHProject ~$ git add src/main/resources/reference.conf

my-mac:myGHProject ~$ git commit -m "updates on some config"
  [my-local-branch] updates on some config
  1 file changed, 131 insertions(+), 85 deletions(-)

现在您已经完成了此操作,您可以签出另一个分支并轻松地来回切换。

my-mac:myGHProject ~$ git checkout other-branch

my-mac:myGHProject ~$ git status
  On branch other-branch

my-mac:myGHProject ~$ git checkout my-local-branch
  Switched to branch 'my-local-branch'

在运行git push origin $ {branch}命令时,请确保您既在正确的分支上,又在正确的分支上进行推送。注意:如果您直接将项目挂接到Intellij,则可以在主窗口的右下角看到更改了分支。