ローカルブランチをリモートに強制的に一致させる
ローカルの変更を捨ててリモートと完全に一致させたい時に使う方法
状況例
以下のような状況の時に有効な方法
レビュー → 修正 → 修正の再レビューを行う(レビューアー時)
他の人がrebaseしたブランチをローカルに反映する
自分のコミットを捨ててリモートの状態に戻す
流れ
リモートの最新情報をローカルに認識させ、ローカルのHEADをそこに強制移動させることで最新化する
リモートブランチ確認
resetするブランチを確認する
リモートブランチ未設定でもブランチ直接指定するため最新化には影響しない(リモートブランチの表示はされない)
ローカルをリモートブランチと同一状態にする(reset)
「ローカルの履歴を捨ててリモートに完全一致させる」
--hard: 未commitの変更、未pushしてない変更も消える
rebase、mergeのようにコミットIDの変更、コミットの追加が起きない
code: (sh)
# リモートブランチ確認
git branch -vv
# 最新取得
git fetch origin
# 最新にreset
git reset --hard origin/{branch}
git branch -vv で[リモートブランチ名] が表示されない場合はリモートブランチを追跡していない状態
以下でリモート追跡を設定することで表示されるようになる(直接ブランチ指定ひてresetするので未設定でもok)
code:_
git branch --set-upstream-to={リモートブランチ名}
# 例)
git branch --set-upstream-to=origin/bug/profile-hash-display
この方法の注意点
リモートに自分のコミットがすでに反映されていることが条件
ローカルのコミットは破棄される(リモートにpush済みの場合は問題無し)
リモートの自分のコミットがrebaseされた場合に有効な手段
rebaseによりコミットIDが変わりローカルとリモートが分岐した状態になる
git pull だとどう統合するか指定が必要になり、余分なコミットが発生する可能性がある
通常の最新化ではgit pull or git pull --rebase が適している
mainの最新を取り込みつつ、自分のコミットを上に積み直す
実行例
ローカルのbug/profile-hash-display をリモートの最新に合わせる必要がある
code: (sh)
# リモートブランチ確認
❯ git branch -vv
...
* bug/profile-hash-display d436fe36b origin/bug/profile-hash-display # このブランチでresetする
# 最新取得
❯ git fetch origin
# 最新にreset
❯ git reset --hard origin/bug/profile-hash-display
HEAD is now at d436fe36b ...
#Git