カテゴリー
コンピューター

【Git】修正した一部分だけを直前のコミットに含める方法

やりたいこと

  1. コミット終了、次の作業へ Go!
  2. ファイル編集中に、前回コミットに含めるべき修正に気がついた><。

編集した一部分のみ直前のコミットへ含め、その後、残りの修正を普通にコミットしたい。

使用する Git コマンド

# 対話的にハンクをインデックスへ追加
git add --patch <pathspec>

# 直近のコミットを変更してコミット
git commit --amend
  • ハンク: 変更点の塊のこと

実践の記録

コミット後、編集が進んだ途中で前回のコミットに含めるべき修正が見つかりました。

その修正も完了して、その部分だけ前回のコミットに混ぜ込もう、という時点からスタートです。

$ git log --all --decorate --graph --oneline
* a5f6ab2 (HEAD -> 2nd-feature) B社回答1と問い合わせ2を追加する
*   7241024 (master) A社からの回答を反映する
... 略 ...
$ git add --patch QAndA.md
index bd80989..83b2351 100644
--- a/QAndA.md
+++ b/QAndA.md
@@ -1,11 +1,12 @@
 # 各社へ問い合わせ
 ## 概要
 - 機能1の変更は可能か?
-  - B社に問い合わせ、回答待ち中 (2016年2月8日)
+  - B社に2回目問い合わせ、回答待ち中 (2016年2月8日)
   - A社から2016年2月8日回答受取済み。
     → C社へ問い合わせよ、とのこと。
 - 途中契約変更は可能か?
-  →C社に問い合わせ、回答待ち中 (2016年2月8日)
+  →C社に2回目問い合わせ、回答待ち中 (2016年2月9日)
+  - 機能2部分のみの変更は不可能
   - 機能3の変更は可能か?
     →問い合わせ不要と判明済み (2016年2月8日)

Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]? s
Split into 2 hunks.
@@ -1,7 +1,7 @@
 # 各社へ問い合わせ
 ## 概要
 - 機能1の変更は可能か?
-  - B社に問い合わせ、回答待ち中 (2016年2月8日)
+  - B社に2回目問い合わせ、回答待ち中 (2016年2月8日)
   - A社から2016年2月8日回答受取済み。
     → C社へ問い合わせよ、とのこと。
 - 途中契約変更は可能か?
Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]? y
@@ -5,7 +5,8 @@
   - A社から2016年2月8日回答受取済み。
     → C社へ問い合わせよ、とのこと。
 - 途中契約変更は可能か?
-  →C社に問い合わせ、回答待ち中 (2016年2月8日)
+  →C社に2回目問い合わせ、回答待ち中 (2016年2月9日)
+  - 機能2部分のみの変更は不可能
   - 機能3の変更は可能か?
     →問い合わせ不要と判明済み (2016年2月8日)

Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]? q

$ git status
On branch 2nd-feature
Changes to be committed
  (use "git reset HEAD <file>..." to unstage)

        modified:   QAndA.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   QAndA.md
↑同じファイルがコミット予定されており、かつ、ステージングされていない。
 このことから、ファイルの一部分のみコミット予定なことがわかる。

$ git difftool
↑ステージングに追加したハンク以外の部分が差分として表示された。

$ git commit --amend
[2nd-feature 9180acd] B社回答1と問い合わせ2を追加する
 Date: Tue Feb 9 20:50:12 2016 +0900
 1 file changed, 99 insertions(+), 2 deletions(-)

↓↓↓エディタが開いてコミットメッセージを編集
B社回答1と問い合わせ2を追加する

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      The Feb 9 20:50:12 2016 +0900
#
# On branch 2nd-feature
# Changes to be committed:
#   modified:   QAndA.md
#
# Changes not staged for commit:
#   modified:   QAndA.md
#

↑↑↑エディタここまで

$ git log --all --decorate --graph --oneline
* 9180acd (HEAD -> 2nd-feature) B社回答1と問い合わせ2を追加する
*   7241024 (master) A社からの回答を反映する
... 略 ...
↑直前のコミットを変更した影響で、SHA-1 値が a5f6ab2 から 9180acd へ変わっている。

おわりに

参考ページです。ありがとう存じます♪

どちらも公式ページのドキュメント、Pro Git からですの。

異なるトピックを組み合わせて今回の問題を解決することができました♪

少し Git に慣れてきたかしら!

以上です。

コメントを残す