【TortoiseGit】親ブランチの修正を子ブランチに反映する方法(リベース)

親ブランチをmaster。masterから切った作業用ブランチをdevとする。
dev側で作業中に、master側に入った修正をdevに取り込みたいとき。
TortoiseGitでどうやってrebaseするかを以下にまとめる。

  1. devの作業ブランチで「右クリック」→「TortoiseGit」→プル(デフォルト設定)を実施して、ローカルにリモートの修正を反映しておく。
    ※この作業は不要かも?
  2. devの作業ブランチで「右クリック」→「TortoiseGit」→「リベース(ブランチの付け替え)」を選択
  3. ブランチに「dev」、上流に「remotes/origin/master」を選択。
  4. デフォルトのままリベース開始を選択する。
  5. master側でサブモジュールに更新があった場合、なぜか該当のサブモジュールにチェックが入っていないが、チェックを外したままにする。
  6. コンフリクトが発生したら、対象ファイルを右クリック→「競合の編集」にて解消する。この際、「ベース」、「remotes/origin/master」、「dev」が表示されるが、「remotes/origin/master」がリモートの内容、「dev」がローカルの内容となる。コンフリクト解消結果は、「dev」に記載して上書き保存すれば、作業コピーの該当ファイルに反映される。
    なお、一時的に生成されている、対象ファイル名.BASE、対象ファイル名.LOCAL、対象ファイル名.REMOTEに反映されるわけではないので注意。
  7. コンフリクトを解消したら、対象ファイルを右クリックし、指定の方法で解決する。
    「解決済み」を選択したら、作業コピーの該当ファイルの内容が反映される。
    「”dev”を使って競合を解決」を選択したら、対象ファイル名.LOCALの内容が反映される。
    「”remotes/origin/masterを使って競合を解決」を選択したら、対象ファイル名.REMOTEの内容が反映される。
  8. この時点でF5キーを押してエクスプローラー上の表記を更新すると、devの作業ブランチに、master側の修正が取り込まれていることがわかる。
  9. サブモジュールに更新があった場合は、この時点でサブモジュールをすべて更新する。
    更新の際は「サブモジュールを初期化する(–init)」、「再帰的」、「強制」にチェックを入れる。
  10. devの作業ブランチで「右クリック」→「TortoiseGit」→プル(デフォルト設定)
    ※remotes/origin/masterの修正をローカルリポジトリに反映させる。
    なぜかコンフリクトするケースがあるので、その場合は、あらためてコンフリクトを解消してコミットする。
    →調査結果
    ローカルブランチに対してリベースしているから、リモートブランチ側が修正されておらずコンフリクトしている可能性が高い。
    よって、プル自体を実行せずに、プッシュ時に「把握外の変更」にチェックを入れ、リモートブランチをローカルブランチの内容で上書きしてしまえばOK。
    強制プッシュした場合は、以下のメッセージは出ない。

    「あなたが作業しているコミットは特別なコミットです~」云々が表示されるが、気にせずにコミット。

  11. devの作業ブランチで「右クリック」→「TortoiseGit」→プッシュ(デフォルト設定+「把握外の変更」にチェック)
    ※デフォルトでローカルのdevをリモートのdevにプッシュするようになっているはず。

これで、ローカルのdevに取り込まれた内容がリモートのdevに反映されて作業完了。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です