คุณควรใช้ดัชนี หลังจากทำการรีเซ็ตแบบผสม (" git reset HEAD ^") ให้เพิ่มการเปลี่ยนแปลงชุดแรกลงในดัชนีจากนั้นจึงคอมมิท จากนั้นส่งมอบส่วนที่เหลือ
คุณสามารถใช้ " git add " เพื่อวางการเปลี่ยนแปลงทั้งหมดในไฟล์ไปยังดัชนี หากคุณไม่ต้องการให้ทุกการดัดแปลงที่ทำในไฟล์มีเพียงการแก้ไขบางอย่างคุณสามารถใช้ "git add -p"
ลองดูตัวอย่าง สมมุติว่าฉันมีไฟล์ชื่อ myfile ซึ่งมีข้อความต่อไปนี้:
something
something else
something again
ฉันแก้ไขมันในการกระทำครั้งล่าสุดของฉันเพื่อให้ตอนนี้ดูเหมือนว่านี้:
1
something
something else
something again
2
ตอนนี้ฉันตัดสินใจแล้วว่าฉันต้องการแยกมันออกเป็นสองส่วนและฉันต้องการให้การแทรกของบรรทัดแรกอยู่ในการคอมมิชชันแรกและการแทรกของบรรทัดสุดท้ายให้อยู่ในการคอมมิชชันที่สอง
ก่อนอื่นฉันกลับไปที่ผู้ปกครองของ HEAD แต่ฉันต้องการเก็บการแก้ไขในระบบไฟล์ดังนั้นฉันจึงใช้ "git reset" โดยไม่มีการโต้แย้ง (ซึ่งจะทำการรีเซ็ตแบบ "ผสม"):
$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2
ตอนนี้ฉันใช้ "git add -p" เพื่อเพิ่มการเปลี่ยนแปลงที่ฉันต้องการส่งไปยังดัชนี (= ฉันจัดลำดับพวกเขา) "git add -p" เป็นเครื่องมือโต้ตอบที่ถามคุณเกี่ยวกับการเปลี่ยนแปลงของไฟล์ที่ควรเพิ่มในดัชนี
$ git add -p myfile
diff --git a/myfile b/myfile
index 93db4cb..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,5 @@
+1
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,s,e,?]? s # split this section into two!
Split into 2 hunks.
@@ -1,3 +1,4 @@
+1
something
something else
something again
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? y # yes, I want to stage this
@@ -1,3 +2,4 @@
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,K,g,e,?]? n # no, I don't want to stage this
จากนั้นฉันยอมรับการเปลี่ยนแปลงครั้งแรก:
$ git commit -m "Added first line"
[master cef3d4e] Added first line
1 files changed, 1 insertions(+), 0 deletions(-)
ตอนนี้ฉันสามารถคอมมิชชันการเปลี่ยนแปลงอื่น ๆ ทั้งหมด (เช่นตัวเลข "2" ใส่ในบรรทัดสุดท้าย):
$ git commit -am "Added last line"
[master 5e284e6] Added last line
1 files changed, 1 insertions(+), 0 deletions(-)
ลองตรวจสอบบันทึกเพื่อดูว่าเรามีข้อผูกพันอะไรบ้าง:
$ git log -p -n2 | cat
Commit 5e284e652f5e05a47ad8883d9f59ed9817be59d8
Author: ...
Date: ...
Added last line
Diff --git a/myfile b/myfile
Index f9e1a67..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -2,3 +2,4 @@
something
something else
something again
+2
Commit cef3d4e0298dd5d279a911440bb72d39410e7898
Author: ...
Date: ...
Added first line
Diff --git a/myfile b/myfile
Index 93db4cb..f9e1a67 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,4 @@
+1
something
something else
something again
git reset [--patch|-p] <commit>
ที่คุณสามารถใช้เพื่อช่วยให้คุณประหยัดปัญหาในการgit add -p
รีเซ็ตหลังจากนั้น ฉันถูกไหม? ใช้ git 1.7.9.5