Bạn nên sử dụng chỉ mục. Sau khi thực hiện thiết lập lại hỗn hợp (" git reset HEAD ^"), hãy thêm bộ thay đổi đầu tiên vào chỉ mục, sau đó cam kết chúng. Sau đó cam kết phần còn lại.
Bạn có thể sử dụng " git add " để đặt tất cả các thay đổi được thực hiện trong một tệp vào chỉ mục. Nếu bạn không muốn thực hiện mọi sửa đổi được thực hiện trong một tệp, chỉ một số trong số chúng, bạn có thể sử dụng "git add -p".
Hãy xem một ví dụ. Giả sử tôi có một tệp có tên myfile, chứa văn bản sau:
something
something else
something again
Tôi đã sửa đổi nó trong lần cam kết cuối cùng của mình để bây giờ nó trông như thế này:
1
something
something else
something again
2
Bây giờ tôi quyết định rằng tôi muốn chia nó thành hai và tôi muốn chèn dòng đầu tiên vào cam kết đầu tiên và chèn dòng cuối cùng vào cam kết thứ hai.
Đầu tiên tôi quay lại cha mẹ của HEAD, nhưng tôi muốn giữ các sửa đổi trong hệ thống tệp, vì vậy tôi sử dụng "git reset" mà không cần đối số (sẽ thực hiện cái gọi là "thiết lập lại" hỗn hợp):
$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2
Bây giờ tôi sử dụng "git add -p" để thêm các thay đổi tôi muốn cam kết vào chỉ mục (= Tôi giai đoạn chúng). "Git add -p" là một công cụ tương tác hỏi bạn về những thay đổi đối với tệp nên thêm vào chỉ mục.
$ 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
Sau đó, tôi cam kết thay đổi đầu tiên này:
$ git commit -m "Added first line"
[master cef3d4e] Added first line
1 files changed, 1 insertions(+), 0 deletions(-)
Bây giờ tôi có thể cam kết tất cả các thay đổi khác (cụ thể là chữ số "2" được đặt ở dòng cuối cùng):
$ git commit -am "Added last line"
[master 5e284e6] Added last line
1 files changed, 1 insertions(+), 0 deletions(-)
Hãy kiểm tra nhật ký để xem những gì chúng tôi cam kết:
$ 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>
mà bạn có thể sử dụng để cứu bạn khỏi những rắc rối phải làmgit add -p
sau khi đặt lại. Tôi có đúng không Sử dụng git 1.7.9.5.