かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Git リモートのブランチが先に進んでpushできなくなっているのをどうにかしたい。

複数人で同じブランチに手を入れていて、手元のブランチで変更をコミットして push しようとしたらリモートのブランチが force push とかで先に進んでそのまま push できない状態になっている時の対処方法のメモ

--rebase オプションを付けて pull する

$ git pull --rebase origin <branch_name>

--rebase オプションを付けてpullするとリモートのブランチを取り込んで rebase できる。
つまり、これが
Git リモートブランチが rebase などでそのままpushできなくなっている状態
👇こうなる
git pull --rebase でリモートで 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

入門git