経緯
毎回コンフリクトする度に調べているので、いい加減覚えようと...
rebase
※ 使用中のシェルによってブランチの表示が異なるので注意:自分は fishシェル を使用
※ fishシェルが気になる方は brew install fish
を実行し、fishというコマンドをターミナルに打つと起動するのでお試しあれ!(Macの場合)
rebase
の説明
指定したブランチを現在の作業ブランチのコミットの下にして、 現在のブランチのコミットをその上に積むコマンド (実行後は元のコミット番号が変わってしまうので複数人で同じブランチをいじる際は注意が必要)
# この場合はmasterブランチを作業ブランチの下に敷き直す ~/アプリディレクトリ名 (ブランチ名|✔︎) $ git rebase master ↓ コンフリクト発生 ↓ git diffでコンフリクトしている部分を確認 ~/アプリディレクトリ名 (ブランチ名|REBASE 153/239|●6✖1✚1) $ git diff # 下にコンフリクトした差分が表示される # ++<< HEADというところから >>>の部分までが修正差分が競合している箇所 diff --cc app/views/hoge/hoge.html.erb index 28666ad881,235c56e9bf..0000000000 --- a/app/views/hoge/hoge.html.erb +++ b/app/views/hoge/hoge.html.erb @@@ -250,7 -250,7 +250,11 @@@ </dl> </div> <p class="hoge"> ++<<<<<<< HEAD # 上が自分の環境の変更 + <a href="https://hogefuga.com/jc/ja/search?query=FUGABAR" target="_blank">もっと見る</a> ++======= # 下がrebaseしようとしたブランチ側の変更 + <a href="https://hogefuga.com/jc/ja/search?query=HOGEBAR" target="_blank">もっと見る</a> ++>>>>>>> リンク先を変更 </p> </section>
コンフリクト部分の修正手順
「コンフリクトが発生する」 → 「コンフリクトを修正する」→「git add .」 → 「git rebase --continue」を繰り返す
git add . git rebase --continue # 差分がない表示になれば、rebase成功 ~/アプリディレクトリ名 (ブランチ名|✔︎) $
おまけ
cherry-pick
cherry-pick
の説明
特定のブランチのコミットだけを切り出して、 別のブランチのコミットにすることが出来るコマンド
# コミットを抜き取りたいブランチで取得したいコミットのコミット番号確認 ~/アプリディレクトリ名 (ブランチA |✔︎) $ git log コミット番号やコミットメッセージなどが出力される(省略) # 抜き出したコミットを反映したいブランチに移動する ~/アプリディレクトリ名 (ブランチA |✔︎) $ git checkout ブランチB # コミットログで見たコミット番号を指定する ~/アプリディレクトリ名 (ブランチB |✔︎) $ git cherry-pick d0e0112cedab680f408cfc63449494d0ec52f682 # fishシェル上だと ↑1 と表示されるので、コミットが1つ積まれたことが確認出来ます ~/アプリディレクトリ名 (ブランチB↑1 |✔︎)