情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

gitでリモートのブランチをチェックアウトできずにつまずいたとき

gitを使ったチーム開発で問題が起こりました。開発の手順は以下のようになります。

  1. リモートのブランチ[A]をローカルにチェックアウトする
  2. ローカルに作業用ブランチ[B]を作る、制作をする、時が流れる
  3. ローカルのブランチ[A]が古くなっていて諸事情によりローカルブランチ[A]を削除する
  4. 再度[A]をリモートからチェックアウトする
  5. ローカルブランチ[A]で作業用ブランチ[B]をマージする
  6. ローカルブランチ[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]

これで作業内容をリモートに反映させることが出来ます。

以下のサイトを参考にしました。

git fetchの理解からgit mergeとpullの役割 - Qiita

GitHub にアップされているブランチをローカルに取り込む