这个问题类似于this one,但更具体。
我有一个有两个分支的项目(staging
和beta
)。
我在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中的提交,只要它们不是push
ed);或 - 使用藏匿处:
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
会将最新的存储条目应用于您当前的分支,恢复已保存的更改并将其从存储中删除。
我遇到了同样的问题,并解决了它
git checkout -f branch
它的规格很清楚。
-f, - force
切换分支时,即使索引或工作树与HEAD不同,也要继续。这用于丢弃本地更改。
检查索引中的路径时,不要在未合并的条目上失败;相反,未合并的条目将被忽略。
如果您不想提交本地更改,则可以强制签出您的分支。
git checkout -f branch_name
我遇到了同样的问题,并解决了它
git checkout -f branch
好吧,小心-f
开关。如果使用-f
开关,您将丢失任何未提交的更改。虽然可能有一些用例有助于使用-f
,但在大多数情况下,你可能想要stash
你的变化然后switch
分支。上面解释了stashing
程序。
您可以在当前分支中提交,签出到另一个分支,最后挑选该提交(代替合并)。
如果你在尝试检查一个不同的分支时得到这个:
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,您可以看到您在主窗口的右下角更改了分支。