web-dev-qa-db-ja.com

masterブランチへの変更時のエラー:ローカルの変更はチェックアウトによって上書きされます

この質問は this one に似ていますが、より具体的です。

2つのブランチ(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が取得されます

95
Manolo

ファイルを変更し、切り替え先のブランチにもこのファイルに対する変更が(最新のマージポイントから)ある場合、エラーが表示されます。

私が見るように、あなたのオプションは-コミットです。そして、このコミットを追加の変更で修正します(Pushedでない限り、gitでコミットを変更できます)。または-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は、変更を含むstashを作成しますが、コミットやブランチとは関連付けられていません。 git stash popは、最新のstashエントリを現在のブランチに適用し、保存した変更を復元してstashから削除します。

92
keltar

私は同じ問題に遭遇し、それを解決しました

git checkout -f branch

その仕様はかなり明確です。

-f、-force

ブランチを切り替えるときは、インデックスまたは作業ツリーがHEADと異なる場合でも続行します。これはthrow awayローカルの変更に使用されます。

インデックスからパスをチェックアウトするとき、結合されていないエントリで失敗しないでください。代わりに、マージされていないエントリは無視されます。

105
kiki_yu

ローカルの変更をコミットしたくない場合は、ブランチを強制的にチェックアウトできます。

git checkout -f branch_name
12
Deepika Patel

私は同じ問題に遭遇し、それを解決しました

git checkout -f branch

まあ、-fスイッチには注意してください。 -fスイッチを使用すると、コミットされていない変更は失われます。 -fを使用すると便利な使用例もありますが、ほとんどの場合、変更をstashしてから、switchブランチにしたい場合があります。 stashingプロシージャは上記で説明されています。

3
BeNiza

現在のブランチでコミットし、別のブランチにチェックアウトし、最終的に(マージの代わりに)そのコミットをチェリーピックできます。

0