89
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

git commit --amendで3つのコミットを1つのコミットにまとめる

Last updated at Posted at 2019-06-10

本稿ではgitで直近3つのコミットを1つのコミットにまとめる方法を説明する。

本稿で詳解する方法には次の特徴がある。

  1. 最初のコミットのコミットメッセージだけが残る。
  2. git rebase -iを使わない。

ちなみに、本稿で紹介する手順を手元の環境で再現できるシェルスクリプトをGitHubで公開しているので、実験してみたい方はそちらを試してみて下さい。

やりたいこと

* 4999520 3つ目のコミット ──┐
* fbe2de7 2つ目のコミット ──┴──┐ この2つのコミットを
* 6669c6b 1つ目のコミット ←────┘ こっちにまとめ上げたい
* 0d75409 init

ステップ1: git resetで直近2つのコミットをコミット履歴から除く

まず、コミットメッセージを捨ててもいい2つ目のコミットと3つ目のコミットを、コミットログから取り除きます。

git reset --soft @~2

こうすると、直近2つのコミットはステージだけされた状態になります:

$ git status -s
M  file

$ git diff --staged
diff --git a/file b/file
index c39d3eb..1b45f5b 100644
--- a/file
+++ b/file
@@ -1 +1,3 @@
 改修1
+改修2
+改修3

また、コミットログは1つ目のコミットだけ残った状態になります:

$ git log --oneline --graph --all
* 6669c6b (HEAD -> master) 1つ目のコミット
* 0d75409 init

ステップ2: git commit --amendでもう一度コミットする

次に、git resetした対象を下記コマンドでコミットしなおします。

$ git commit --amend --no-edit

これにより、元々3つあったコミットが最終的に1つのコミットになります。

$ git log --oneline --graph --all
* 050afa9 (HEAD -> master) 1つ目のコミット
* 0d75409 init

差分:

$ git diff @~
diff --git a/file b/file
new file mode 100644
index 0000000..1b45f5b
--- /dev/null
+++ b/file
@@ -0,0 +1,3 @@
+改修1
+改修2
+改修3

以上で作業は完了です。

89
69
3

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
89
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?