16
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?

More than 3 years have passed since last update.

以前のコミットに後からファイルの追加/修正を行う

Posted at

はじめに

開発中に「あ、ここ修正するの忘れてた!」ってなること結構ありますよね。そして、その追加修正分は、できれば3つとか4つ前のコミットに含めたいことが結構あります。
そんな時、自分は一々git resetしてコミットを作り直していたのですが、そんなことをしなくても以前のコミットに後から修正を加えることができることが分かったので、メモしておきます。

やり方

現在のコミットログが以下のようになっているとします。この時memo.txtに修正漏れがあった時を想定します。

commit dc3baf27713ea6ade5f61fe6dc4e94c3befca653 (HEAD -> master)
Author:
Date:   Sun Dec 20 19:01:26 2020 +0900

    todo.txtを修正

commit 50461e0ec0822cd21873c262f8322d203d6dc0a6
Author:
Date:   Sun Dec 20 19:01:07 2020 +0900

    memo.txtを修正

commit efe706a19014573c06666a88a1251069b8ce7763
Author:
Date:   Sun Dec 20 18:54:39 2020 +0900

    memo.txtを追加
    todo.txtを追加

まずは、いつも通りmemo.txtに追加の修正を行い、git addを行います。そして、コミットを作成するときにgit commit --fixup <修正したいコミットID>というコマンドを利用します。今回の場合はmemo.txtに修正を加えたいので、コミットIDは50461e0ec0822cd21873c262f8322d203d6dc0a6になります。

すると、「fixup! memo.txtを修正」というコミットメッセージがついたコミットが作成されます。

git add memo.txt
git commit --fixup 50461e0ec0822cd21873c262f8322d203d6dc0a6

[master db42469] fixup! memo.txtを修正
 1 file changed, 1 insertion(+)

そして最後に、git rebase -i --autosquash <修正したいコミットの1つ前のコミットID>というコマンドを実行します。今回の場合はefe706a19014573c06666a88a1251069b8ce7763が対象になります。見慣れない画面が立ち上がりますが、:wqで上書き保存してOKです。すると、「memo.txtを修正」以降のコミットIDが変わり、後から加えた修正がちゃんと加わっているのがわかります!

最後に

原理はまだ完全には理解できていないですが、とても便利だと思ったので備忘録として残しました。詳しい仕組みはこれから理解して行こうと思います。

16
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
16
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?