gitでリモートのブランチをチェックアウトできずにつまずいたとき
gitを使ったチーム開発で問題が起こりました。開発の手順は以下のようになります。
- リモートのブランチ[A]をローカルにチェックアウトする
- ローカルに作業用ブランチ[B]を作る、制作をする、時が流れる
- ローカルのブランチ[A]が古くなっていて諸事情によりローカルブランチ[A]を削除する
- 再度[A]をリモートからチェックアウトする
- ローカルブランチ[A]で作業用ブランチ[B]をマージする
- ローカルブランチ[A]をリモートブランチ[A]にpushする
4の段階でチェックアウトしてきたローカルブランチ[A]とリモートブランチ[A]を比較した際にかなりの相違が見られました。 つまり最新の[A]をローカルにチェックアウトできていませんでした。
行ったコマンドは以下のようになります。
1. リモートのブランチ[A]をローカルにチェックアウトする
$git checkout [A] origin/[A]
ローカルにブランチ[A]ができます。
2.ローカルに作業用ブランチ[B]を作る、制作をする
git branch [B]
ブランチ[B]で作業をします
3. ローカルのブランチ[A]が古くなっているのでローカルブランチ[A]を削除する
$git branch -D [A]
ブランチ [A]が消えます
4.再度[A]をリモートからチェックアウトする
$git checkout [A] origin/[A]
ここで最新の[A]をローカルに入れたかったのですがなぜか内容が古い、、、 1の時は最新の状態にすることが出来たのですが
解決方法
どうやらローカルのリポジトリを更新する必要があるということで
$git fetch
をしました。これはローカルの情報が古ければ、リポジトリ情報がダウンロードされ更新されます。
5. ローカルブランチ[A]で作業用ブランチ[B]をマージする
$git merge [B]
で[B]の作業内容をマージします。
ここでpushする前に本当にリモートにpushしていいか一度確認しましょう。
まずはローカルとリモートにある全てのブランチを表示します。
$git branch -a
とすると remotes/origin/[A] といった感じでリモートのブランチが確認できると思うので ローカルの現在いるブランチとリモートのブランチの差分を表示します。
git diff remotes/origin/[A]
これで差分が作業した内容のみになっていれば大丈夫です。
6. ローカルブランチ[A]をリモートブランチ[A]にpushする
$git push origin [A]
これで作業内容をリモートに反映させることが出来ます。
以下のサイトを参考にしました。