LoginSignup
8
11

More than 5 years have passed since last update.

【備忘録】Gitのコミットを綺麗にまとめる色々な方法

Posted at

Gitのコミットを綺麗にまとめる方法

とりあえず方法を2つ(他に簡単な方法があれば知りたい)

  • git rebase -i を用いる方法
  • git merge --squash を用いる方法

git rebase -i を用いる方法

特徴
* squash や fixup など各コミットについて個別に細かい指定が可能
* 一般的なやり方(?)

サルでもわかるGit入門をまとめると以下の手順

  1. git log などで現在作業しているブランチの最初のコミットを確認
  2. git rebase -i HEAD~(ブランチの最初から何回コミットしたか) を実行
    例)$ git rebase -i HEAD~3
  3. テキストエディタが開くので最初の行以降の pick になっている項目を squash(もしくは省略でs) に変更して保存、終了
  4. もう一度テキストエディタが開くので、コミットメッセージを編集して保存、終了
  5. push

git merge --squash を用いる方法

特徴
* コミット個別の設定云々よりもとにかく1つにまとまればOKの場合はこちらが簡単
* 最初のコミットが何個前か〜、順番が〜、コメントが〜、等を考えなくて良い
* 新規の別ブランチを使うので操作の失敗に強い(気がする)

サルでもわかるGit入門をまとめると以下の手順

  1. 現在のブランチがpushするブランチ名になっているか確認。もし なっていたらリネームする。
  2. ブランチのリネームは git branch -m <古いブランチ名> <新しいブランチ名> で可能
  3. push するブランチを新たに作成。※新規ブランチ作成はブランチ元をチェックアウトして行うこと
  4. 新たに作成したブランチをチェックアウトして git merge --squash <まとめたいブランチ> を実行
  5. コミットしてpush
具体例)
feature ブランチから feat/Proc1 を作成して作業していたが、push前に1つにまとめたい場合。

1. まずは作業していたブランチをリネーム

    $ git branch -m feat/Proc1 feat/Proc1_hist

2. feature ブランチからコミットログの無い feat/Proc1 を新たに作成

    $ git checkout feature
    $ git checkout -b feat/Proc1    // ブランチ作成と同時にチェックアウト

    これで
    * feat/Proc1_hist :コミットログが溜まっている作業ブランチ
    * feat/Proc1      :push用のブランチ(コミットログ無し)
    が出来る

3. feat/Proc1 に対して feat/Proc1_hist を squash でマージ

    $ git merge --squash feat/Proc1_hist

    ※ もし merge に --no-ff を設定していたら --ff も付ける

4. feat/Proc1_hist のコミットがまとめて stage されているのでコミット&push

    $ git commit
    $ git push origin feat/Proc1

    ※ 作業が完了したら必要に応じて feat/Proc1_hist を削除。

8
11
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
8
11