この質問は 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
が取得されます
ファイルを変更し、切り替え先のブランチにもこのファイルに対する変更が(最新のマージポイントから)ある場合、エラーが表示されます。
私が見るように、あなたのオプションは-コミットです。そして、このコミットを追加の変更で修正します(Push
edでない限り、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から削除します。
私は同じ問題に遭遇し、それを解決しました
git checkout -f branch
その仕様はかなり明確です。
-f、-force
ブランチを切り替えるときは、インデックスまたは作業ツリーがHEADと異なる場合でも続行します。これはthrow awayローカルの変更に使用されます。
インデックスからパスをチェックアウトするとき、結合されていないエントリで失敗しないでください。代わりに、マージされていないエントリは無視されます。
ローカルの変更をコミットしたくない場合は、ブランチを強制的にチェックアウトできます。
git checkout -f branch_name
私は同じ問題に遭遇し、それを解決しました
git checkout -f branch
まあ、-f
スイッチには注意してください。 -f
スイッチを使用すると、コミットされていない変更は失われます。 -f
を使用すると便利な使用例もありますが、ほとんどの場合、変更をstash
してから、switch
ブランチにしたい場合があります。 stashing
プロシージャは上記で説明されています。
現在のブランチでコミットし、別のブランチにチェックアウトし、最終的に(マージの代わりに)そのコミットをチェリーピックできます。