0
1

gitのコミット履歴を編集したい! (正直このコマンドだけ覚えてたらOK) => git rebase -i

Last updated at Posted at 2024-07-07

コマンド git rebase -i HEAD~○

コミット履歴を変更したい。
何はともあれまず、git log

スクリーンショット 2024-07-08 1.44.46.png

...これより下にはthird commit, second commit, first commit(最初)と続く。

↑にいくほど新しいコミット
↓にいくほど古いコミット

3つのコミット履歴を変更したければ
HEAD~○ の ○ を4に指定
(○ = 変更したい履歴の数 + 1)
(HEADは最新のコミットを指す)

つまり打ち込むコマンドは
git rebase -i HEAD~4
(HEAD~4 = HEADを含んで数えて4つのコミットを編集すると言う意味)

すると、

スクリーンショット 2024-07-08 1.49.24.png

pick 0511...
pick 38c3...
...
pick 016d...

と書かれている部分が過去のコミットを表す。その下の#が説明文。

※注意
↓にいくほど新しいコミット
↑にいくほど古いコミット
(git log の時とは逆)

ここではsquashを説明

先ほどの画像でpickと書かれた部分をsquashまたはsと書き換えることで
コミット履歴を消し、コミット文を編集することができる。
(コミット履歴が消えるだけでそのコミットで行ったファイルの変更などは消えないので安心を)

キーボードのiを押すとinsertモードに変わるので編集
編集後escボタンを押し:wqを入力してEnter

スクリーンショット 2024-07-08 2.09.03.png

!注意!

squashはそのコミットを1つ手前のコミット(1つ古いコミット)にマージさせるような処理なので
squashと記述したコミットの上に、pickとなるコミットがなければエラーが起きる。(これがまた起きたら少々面倒なのじゃ...)

※もちろんこの画像における下から2つ目のpickとなっているコミットの部分をsquashにしても、1番上のコミット(この中で1番古いコミット)がpickとなっているので成功する。
すなわち、

pick 0511..
squash 38c3...
squash 7177...
squash 016d...

でも成功する。今回は画像のようにpicks交互のパターンで進める

コミット文を編集

上記の続き:

:wq->Enterを押すと下記のようにコミット文を編集できる画面に移行

#はコメントアウトされている文なので無視

スクリーンショット 2024-07-08 2.19.07.png

例によってiを押しinsertモードに変更して編集

スクリーンショット 2024-07-08 2.26.25.png

例によってesc->:wq->Enter

すると次のコミットに関するコミット文の編集

スクリーンショット 2024-07-08 2.29.21.png

スクリーンショット 2024-07-08 2.30.13.png

確認

git logで確認してみると見事にコミット履歴が合併されている

スクリーンショット 2024-07-08 2.31.26.png

注意

pushpullなど、リモートリポジトリとやり取りした以降のコミット履歴しか編集してはならない。コミット履歴はプロジェクトの仲間と共有しているから、ハッシュ値そのものが変わってしまうと迷惑をかけることになる。ローカルのみにしか存在しないコミット履歴の範囲を編集してそれをpushはOK。

非推奨のpushは、した時に警告がでるのでそれを要確認。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1