複数人で同じブランチに手を入れていて、手元のブランチで変更をコミットして push しようとしたらリモートのブランチが force push とかで先に進んでそのまま push できない状態になっている時の対処方法のメモ
--rebase
オプションを付けて pull する
$ git pull --rebase origin <branch_name>
--rebase
オプションを付けてpullするとリモートのブランチを取り込んで rebase できる。
つまり、これが
👇こうなる
rebase なのでコンフリクトすることもあるけど、手元のブランチ名を変えて、リモートブランチを checkout し直して必要なコミットを cherry-pick
するよりだいぶ楽です。( pull --rebase
知るまでずっとこうしてた… )
おまけ git fetch --prune
でリモートで消されたブランチをローカルに反映する
--prune
オプションを付けて fetch すると、リモートで削除されたブランチの情報をローカルに反映してくれる。
リモートで消えてるブランチの情報が残り続けてると無駄にデータ容量とってしまうのでローカルの git の容量削減に。
$ git fetch --prune
.gitconfig
に設定すれば fetch 時に常に --prune
を指定してくれるようにもできるっぽい
$ git config --global fetch.prune true
[参考]
- git pull と git pull –rebase の違いって?図を交えて説明します! – KRAY Inc.
- git pullのとき常にpruneするための設定 - Qiita
- Gitコマンドについて調べる【git fetch】 - Blog @kimromi
- 作者:Travis Swicegood
- 出版社/メーカー: オーム社
- 発売日: 2009/08/12
- メディア: 単行本(ソフトカバー)