此问题类似于this one,但更具体。
我有一个包含两个分支(staging
和beta
)的项目。
我在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
答案 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>
现在解决冲突。
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,则可以在主窗口的右下角看到更改了分支。