ブランチAがあり、そこからブランチBがあるとします。Aに一連の変更を加えてから、Bをチェックアウトしてaを実行しgit pull
ます。Bを変更しましたが、Aに変更する必要があることに気付きました。これを実行しようとするとgit checkout A
、タッチしたファイルに「次のファイルへのローカル変更はチェックアウトによって上書きされます」というメッセージが表示されます。
Bでgitpullを実行し、それ以降Aでそのファイルに触れていない場合、変更が上書きされるのはなぜですか?
ブランチAがあり、そこからブランチBがあるとします。Aに一連の変更を加えてから、Bをチェックアウトしてaを実行しgit pull
ます。Bを変更しましたが、Aに変更する必要があることに気付きました。これを実行しようとするとgit checkout A
、タッチしたファイルに「次のファイルへのローカル変更はチェックアウトによって上書きされます」というメッセージが表示されます。
Bでgitpullを実行し、それ以降Aでそのファイルに触れていない場合、変更が上書きされるのはなぜですか?
このメッセージが表示される理由は、基になるファイル (コミットされていない変更の前) がブランチ A とブランチ Bで異なるためです。ファイルが同じである場合、Git はブランチを切り替え、ブランチ A に切り替えた後も同じコミットされていない変更を保持します。
これらの変更を行う 1 つの方法は、それらを隠しておくことです。
(on branch B)$ git stash
git checkout A
git stash pop
競合する変更がある場合は、この時点で競合を解決する必要がある場合があります。変更があっても競合しない場合、これは成功します。