7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Keisuke Death MarchAdvent Calendar 2023

Day 19

【Git】push前にsquashで複数のcommitをまとめる

Last updated at Posted at 2023-12-19

はじめに

pushする前に、commit分けすぎてまとめてからpushしたいときによく使うgit rebaseを使ったsquash(スカッシュ)について手順をまとめます。

ちなみにsquash(スカッシュ) は「押しつぶす」とか「ぺちゃんこにする」という意味だそうです。

スカッシュの手順

現状このようなコミットがあったとします。
今回は[add]fuga[add]hoge[add]foobarのコミットをまとめます。

user1@user1noMacBook-Pro rabase-test % git log --oneline -5
04183ba (HEAD -> develop) [add]fuga
c55e5e9 [add]hoge
1e57b68 [add]foobar
af7104c Third
e0b30cc Second

git rebase -iコマンドを実行するとvimに切り替わり、下記のような画面をインタラクティブモードで開けるようになります。

コミットが古い順で表示されています。

まとめるには、まとめたいコミットの1番古いコミット以外をpickからiに変更します。

今回では、[add]foobarまとめたい中で1番古いコミットなので、それ以外の[add]hoge[add]fugapickからsに修正します。

修正前
% git rebase -i HEAD~5
pick e0b30cc Second
pick af7104c Third
pick 1e57b68 [add]foobar
pick c55e5e9 [add]hoge
pick 04183ba [add]fuga

# 省略
修正後
pick e0b30cc Second
pick af7104c Third
pick 1e57b68 [add]foobar
s c55e5e9 [add]hoge
s 04183ba [add]fuga

# 省略

保存するとコミットメッセージの画面に切り替わります。

ここではまとめた、3つのコミットメッセージが表示されています。

このままでも保存できますが、まとめたという内容のコミットメッセージで保存すると、新たなハッシュ値で新しいコミットが作られます。

修正前
# This is a combination of 3 commits.
# This is the 1st commit message:

[add]foobar

# This is the commit message #2:

[add]hoge

# This is the commit message #3:

[add]fuga

# 省略
修正後
# This is a combination of 3 commits.
# This is the 1st commit message:

[add]foobar+hoge+fuga

# This is the commit message #2:


# This is the commit message #3:


# 省略

新しいコミットメッセージで新しいコミットが作られた事が確認できます。

% git log --oneline -5
342db33 (HEAD -> develop) [add]foobar+hoge+fuga
af7104c Third
e0b30cc Second
d4fa0b5 (master) First
7
6
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
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?