master
リモートブランチを追跡するブランチがありますorigin/master
。
master-old
ローカルとリモートの両方で名前を変更したいのですが、これは可能ですか?
追跡していた他のユーザーorigin/master
(および常にmaster
経由でローカル ブランチを更新していたユーザーgit pull
)の場合、リモート ブランチの名前を変更した後はどうなりますか?引き続き機能
しますgit pull
か、それとももう見つからないというエラーがスローされますかorigin/master
?
その後、さらに新しいブランチ (ローカルとリモートの両方) を作成したいと思いますmaster
。繰り返しますが、これを実行した後、他のユーザーがこれを行うとどうなるでしょうかgit pull
?
これらすべてが大きな問題を引き起こすと思います。私が望むものを得るためのクリーンな方法はあるでしょうか? それとも、master
そのままにして新しいブランチを作成しmaster-new
、そこでさらに作業を進めたほうがよいでしょうか?
ベストアンサー1
名前の変更に最も近いのは、リモートで削除してから再作成することです。例:
git branch -m master master-old
git push remote :master # Delete master
git push remote master-old # Create master-old on remote
git checkout -b master some-ref # Create a new local master
git push remote master # Create master on remote
ただし、これには多くの注意点があります。まず、既存のチェックアウトは名前の変更を認識しません。Git はブランチの名前の変更を追跡しようとしません。新しいブランチmaster
がまだ存在しない場合、git pull はエラーになります。新しいブランチが作成されている場合、pull はマージとmaster
を試みます。したがって、以前にリポジトリをチェックアウトしたすべての人の協力がない限り、これは一般的に悪い考えです。master
master-old
注: Git の新しいバージョンでは、デフォルトではマスター ブランチをリモートで削除できません。リモートリポジトリでreceive.denyDeleteCurrent
設定値を または にwarn
設定することで、これを上書きできます。それ以外の場合、すぐに新しいマスターを作成する準備ができている場合は、この手順をスキップして、の手順に進みます。リモートの設定を変更できない場合は、マスター ブランチを完全に削除できないことに注意してください。ignore
git push remote :master
--force
git push remote master
この警告は現在のブランチ (通常はブランチmaster
) にのみ適用されます。他のブランチは上記のように削除して再作成できます。