🍣
コミットを綺麗にするためによく使うgit操作
概要
最近コミットを綺麗にするようgit操作をするために以下のコマンドを多用している。
今回の修正を一つ前のコミットに含ませたい
amendで1つ前のコミットに入れる。no-editでコミットメッセージを変えない。
歴史を変えているためforce pushを行う。
git commit --amend --no-edit
git push -f
今回の修正を2つ以上前のコミットに含ませたい
含ませたいコミットのIDを特定する
git log --oneline
fixupコミットを作る
git commit --fixup <コミットID>
fixupコミットを rebase し push する
git rebase -i <コミットID>~ --autosquash
# コミット履歴が表示されるので修正コミットが含ませたいコミットの下にあることを確認し保存
git push -f
特定のコミットAを別のコミットBに混ぜたい
git rebasae -i <コミットID>~
# Aの行をBの下に移動
# Aのプレフィックスをfに変更
# 保存
git push -f
他人のforkのブランチにpushしたい
他人のforkをローカルに落とす
git remote add <他人の名前> <他人のforkのgit URL>
git fetch <他人の名前>
git switch <ブランチ名>
他人側作業: 作業者アカウントにpush権限をつける
pushする
git push
修正があるのにpull, push, rebaseしたい
git stash save を pop を勝手にやってくれるオプション
git pull --autostash
squash and merge 後のコンフリクト解消
以下のようにブランチを切った時
A-->B-->C
例:merge -> API B -> API C
BをAにsquash and mergeした時
B-(squash and merge)->A
Cにpullするとコンフリクトを起こす
git checkout C
# コンフリクト!!
これはsquash and mergeでAの歴史が変わるから。
解消にはAから再びC'を作りCのコミットをC'にcherry-pickする。
git checkout A
git checkout -B C_bk
git checkout A
git branch -D C
git checkout -B C
cherry-pic <コミットID X>..<コミットID Y>
git push
コミットID X : Cの最初のコミットの1つ前のコミット
コミットID Y : Cの最後のコミット
Discussion