Gitでファイルの一部だけコミットする方法
Gitでは、ファイル全体ではなく、そのファイルの特定の部分だけをコミットすることができます。これは、ファイルの他の部分には変更を加えたくない場合や、特定の変更のみを記録したい場合に便利です。
インデックスへのステージング:
git add --patch
: このコマンドを使用すると、ファイルの変更を逐一確認しながらインデックスにステージングすることができます。
git add --patch <filename>
- インタラクティブモード: コマンドを実行すると、変更された行が逐一表示されます。
y
: 行をステージングする。s
: 行の一部だけをステージングする。e
: エディタで変更を編集する。q
: ステージングを中止する。
コミット:
git commit
: ステージングされた変更をコミットします。
git commit -m "Commit only part of the file's changes"
例
git add --patch myfile.txt
diff --git a/myfile.txt b/myfile.txt
index 3189543..c255402 100644
--- a/myfile.txt
+++ b/myfile.txt
@@ -10,7 +10,7 @@
function myFunction() {
// ...
- console.log("Old message");
+ console.log("New message");
}
}
Stage this hunk? (y/n/q/e/?): y
これで、myfile.txt
の10行目の変更のみがインデックスにステージングされ、コミットされます。
注意:
git add
を直接使用すると、ファイル全体がインデックスにステージングされます。git reset HEAD -- <filename>
を使用すると、インデックスからファイルの変更を元に戻すことができます。
Git部分コミット解説とコード例
git add --patch <filename>
git commit -m "Commit only part of the file's changes"
git add --patch myfile.txt
diff --git a/myfile.txt b/myfile.txt
index 3189543..c255402 100644
--- a/myfile.txt
+++ b/myfile.txt
@@ -10,7 +10,7 @@
function myFunction() {
// ...
- console.log("Old message");
+ console.log("New message");
}
}
Stage this hunk? (y/n/q/e/?): y
さらに詳しい解説
git add --patch
のオプション:-p
: インタラクティブモードを有効にする。-d
: 削除された行をステージングする。-x
: すべての変更をステージングする。
git commit
のオプション:-m
: コミットメッセージを設定する。-a
: ステージングされていない変更をすべてコミットする。--amend
: 直前のコミットを修正する。
Git部分コミットの代替方法
Gitでは、ファイルの一部だけをコミットする方法は、git add --patch
以外にもいくつかあります。
特定の行をステージング:
git add <filename>:<start_line>,<end_line>
: 指定した行範囲をステージングします。
git add myfile.txt:10,15
git add -p <filename>
: インタラクティブモードで、変更された行を逐一確認しながらステージングします。
git add -p myfile.txt
git add -e <filename>
: エディタで変更を編集し、ステージングします。
git add -e myfile.txt
特定の変更を元に戻す:
git checkout -- <filename>
: インデックスからファイルの変更を元に戻します。
git checkout -- myfile.txt
特定の変更をコミット:
git commit -m "Commit specific changes"
: ステージングされた変更をコミットします。
git commit -m "Commit specific changes"
# 特定の行をステージング
git add myfile.txt:10,15
# インタラクティブモードで変更をステージング
git add -p myfile.txt
# エディタで変更を編集し、ステージング
git add -e myfile.txt
# 特定の変更を元に戻す
git checkout -- myfile.txt
# ステージングされた変更をコミット
git commit -m "Commit specific changes"
git git-commit