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

问题描述 投票:92回答:6

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

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

我在staging上开发,并使用master分支来修复bug。因此,如果我正在进行分段并且我看到错误,我将更改为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

git git-checkout
6个回答
97
投票

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

我认为你的选择是 - 提交,然后通过额外的更改修改这个提交(你可以修改git中的提交,只要它们不是pushed);或 - 使用藏匿处:

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会将最新的存储条目应用于您当前的分支,恢复已保存的更改并将其从存储中删除。


109
投票

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

git checkout -f branch

它的规格很清楚。

-f, - force

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

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


13
投票

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

git checkout -f branch_name

3
投票

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

git checkout -f branch

好吧,小心-f开关。如果使用-f开关,您将丢失任何未提交的更改。虽然可能有一些用例有助于使用-f,但在大多数情况下,你可能想要stash你的变化然后switch分支。上面解释了stashing程序。


-1
投票

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


-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,您可以看到您在主窗口的右下角更改了分支。

© www.soinside.com 2019 - 2024. All rights reserved.