🐷
Git コミットの編集・統合
コミットメッセージを編集
パターン1:直前のコミットメッセージの編集
$ git commit --amend
パターン2:N個前のコミットメッセージの編集
編集したい箇所の一つ前のコミットIDを指定して下さい。
編集したいコミットを「edit」に変更します(複数指定可)
この時点でコミットメッセージを編集しても反映されません。
※共用のリポジトリにプッシュ済のコミットは編集しないようにして下さい。
$ git rebase -i 448a955
pick be5fd83 cを追加 編集2
edit 0d495f1 eを追加
pick 75a78b3 fを追加
pick 236c73e gを追加 編集した
pick 8167971 hを追加 編集3
edit 04d26e3 iを追加
editを指定したコミットメッセージを編集
$ git commit --amend
git rebaseの確定(ある場合は次のコミットメッセージの編集を行う)
HEADが修正するコミットごとに動いていくイメージです。
git rebase --continue
コミットメッセージ編集時の注意
「#」を先頭につけるとコメントとして認識されてしまいます
Aborting commit due to empty commit message.
対策
- 先頭にスペースを入れる
- 先頭に文字列をいれる
既にプッシュ済のコミットメッセージを編集
コミットメッセージをgit rebaseで編集した後に強制プッシュを行います。
(コミット履歴が変わる為通常のプッシュだと競合が発生しエラーになる)
git push -f origin master
コミットを統合する
コミットメッセージの変更が必要ない場合
「cを追加」のコミットに「dを追加」のコミットを統合します。
コミットメッセージは編集できません。
git rebase -iで指定するコミットIDは、統合したいコミットの一つ前を指定して下さい。
$ git rebase -i 7676538
pick d0ae625 cを追加
fixup 73dc69a dを追加
コミットメッセージの変更が必要な場合
$ git rebase -i 7676538
pick d0ae625 cを追加
squash 73dc69a dを追加
git rebaseを中断する
$ git rebase --abort
git rebaseを戻す
git rebaseする前(HEAD@{6})に戻す
$ git reflog
d38bae4 (HEAD -> master) HEAD@{0}: rebase (finish): returning to refs/heads/master
d38bae4 (HEAD -> master) HEAD@{1}: rebase (pick): iを追加
45d3440 HEAD@{2}: rebase (squash): gを追加
d4126a8 HEAD@{3}: rebase (pick): gを追加
4ae429b HEAD@{4}: rebase (squash): eを追加 squash
96dec9c HEAD@{5}: rebase (start): checkout ff417c7
1e5bf5a HEAD@{6}: commit: iを追加
6c8d4ab HEAD@{7}: commit: hを追加
6a2d1d9 HEAD@{8}: commit: gを追加
6449cb7 HEAD@{9}: commit: fを追加
96dec9c HEAD@{10}: commit: eを追加
ff417c7 HEAD@{11}: rebase (finish): returning to refs/heads/master
ff417c7 HEAD@{12}: rebase (fixup): cを追加
d0ae625 HEAD@{13}: rebase (start): checkout 7676538
73dc69a HEAD@{14}: rebase (abort): updating HEAD
7676538 HEAD@{15}: rebase (start): checkout 7676538
73dc69a HEAD@{16}: rebase (abort): updating HEAD
7676538 HEAD@{17}: rebase (start): checkout 7676538
73dc69a HEAD@{18}: commit: dを追加
d0ae625 HEAD@{19}: commit: cを追加
7676538 HEAD@{20}: commit: bを追加
448a955 HEAD@{21}: commit (initial): first commit
HEAD@{6}に戻りました
$ git reset --hard 'HEAD@{6}'
HEAD is now at 1e5bf5a iを追加
変更内容の取り込み
git rebaseでコミットメッセージを編集した場合、git pullして
リモートリポジトリの変更内容を取り込んで下さい。
git pull origin develop
コミットを戻す
指定のコミットIDまで戻す
$ git reset --hard b57f728279275daf911799dd0273999b0d77abff
指定のコミットIDまで戻す(変更内容をステージに残す)
$ git reset --soft b57f728279275daf911799dd0273999b0d77abff
別ブランチのコミットを移す
対象のコミットIDをメモしておく。(git logで確認)
移したいブランチにチェックアウトしたのち、下記コマンド実行するとコミットを移せます。
$ git cherry-pick b57f728279275daf911799dd0273999b0d77abff
特定のファイルだけ過去のコミットまで戻す
Discussion