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

Man*_*olo 107 git git-checkout

这个问题类似于这一个,但更具体.

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

我开发staging,并使用master分支来修复错误.因此,如果我正在进行暂存并且看到错误,我将更改为master分支:

git checkout master
Run Code Online (Sandbox Code Playgroud)

做的事情:

git add fileToAdd
git commit -m "bug fixed"
Run Code Online (Sandbox Code Playgroud)

然后我合并两个分支:

git checkout staging
git merge master
git checkout beta
git merge beta
Run Code Online (Sandbox Code Playgroud)

如果工作树上有其他文件也没关系.

但是现在,当我尝试更改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
Run Code Online (Sandbox Code Playgroud)

我以为我应该从暂存区域中删除该文件:

git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php
Run Code Online (Sandbox Code Playgroud)

但是我得到了同样的错误.如果git status我得到了No changes to commit

kik*_*_yu 119

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

git checkout -f branch
Run Code Online (Sandbox Code Playgroud)

它的规格很清楚.

-f, - force

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

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

  • 当我的git被卡住(没有本地更改,但仍然是错误),这个解决方案帮助了我! (7认同)
  • 谢谢,你保存我的屏幕,以免拳头通过它. (5认同)
  • 我那样失去了改变 (3认同)
  • 是的,这样做会丢失更改,这应该有一个很大的警告。 (2认同)

kel*_*tar 104

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

您认为,您的选项是 - 提交,然后通过额外的更改修改此提交(您可以修改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
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢你。您确定这不会对我的工作树(未添加文件)进行任何更改吗?我不想丢失我的更改:-/ (3认同)

Dee*_*tel 13

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

git checkout -f branch_name
Run Code Online (Sandbox Code Playgroud)

  • 我以这种方式失去了变化 (2认同)
  • @JacekDziurdzikowski 因此,您丢失了两次更改(请参阅对 kiki_yu 的回答的评论),这两者都是通过应用**非常明确** 提到丢弃本地更改 * 正是目的* 的解决方案。是我的讽刺探测器坏了还是……你是认真的? (2认同)

Sco*_*des 10

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

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

git fetch
Run Code Online (Sandbox Code Playgroud)

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

例如,对于 iOS 开发者:

pod deintegrate
Run Code Online (Sandbox Code Playgroud)

然后尝试再次检查分支。

如果所需的分支不是新的,您可以选择一个提交并修复冲突,或者隐藏更改然后修复冲突。

1.Git Stash(推荐)

git stash
git checkout <desiredBranch>
git stash apply
Run Code Online (Sandbox Code Playgroud)

2. 樱桃采摘(更多工作)

git add <your file>
git commit -m "Your message"
git log
Run Code Online (Sandbox Code Playgroud)

复制您提交的 sha。然后丢弃不需要的更改:

git checkout .
git checkout -- . 
git clean -f -fd -fx
Run Code Online (Sandbox Code Playgroud)

确保您的分支是最新的:

git fetch
Run Code Online (Sandbox Code Playgroud)

然后结帐到所需的分行

git checkout <desiredBranch>
Run Code Online (Sandbox Code Playgroud)

然后挑选另一个提交:

git cherry-pick <theSha>
Run Code Online (Sandbox Code Playgroud)

现在解决冲突。

  1. 否则,您的另一个选择是放弃当前的分支更改
git checkout -f branch
Run Code Online (Sandbox Code Playgroud)


BeN*_*iza 5

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

git checkout -f分支

好吧,请小心-f开关。如果使用该-f开关,您将丢失所有未提交的更改。尽管在某些情况下使用它会有所帮助-f,但在大多数情况下,您可能需要先进行stash更改然后switch分支。stashing上面已说明了该过程。