Git - Amend, thay đổi commit cuối cùng

Trong một số trường hợp bạn commit nhưng bị quên add một số file nào đó và bạn không muốn tạo ra một commit mới thì có thể sử dụng lệnh commit kết hợp tahm số --amend để gộp các file đó và bổ sung vào commit cuối cùng, vì vậy không tạo ra commit mới.  

1. Lệnh Git commit --amend

Cú pháp của lệnh này như sau:

$ git commit --amend

Nếu bạn thực hiện lệnh này ngay sau commit cuối cùng mà không thay đổi gì thêm thì ảnh của commit cuối cùng đó không thay đổi gì, chỉ là nội dung message thay đổi mà thôi. Trình soạn thảo sẽ hiển thị để bạn thay đổi message, đương nhiên bạn có thể để message mặc định mà git đã tạo ra, và message này sẽ ghi đè lên message trước đó.

Ví dụ
$ git commit -m "Bo sung header"
$ git add "myfile.html"
$ git commit --amend

2. Loại bỏ tập tin đã đưa vào stage

Khi bạn đã thêm một file nào đó vào stage (trạng thái staged, đây là trạng thái sẽ được đưa vào blod khi committed) nhưng sau đó muốn loại bỏ nó ra khỏi stage thì có thể sử dụng lệnh reset HEAD.

Ví dụ bạn tạo ra 2 file là freetuts.txt và freetutsdotnet.txt và bạn sử dụng lệnh sau để thêm vào stage.

$ git add freetuts.txt
$ git add freetutsdotnet.txt

Sau khi thực hiện lệnh này bạn sẽ chạy lệnh commit để đưa nó vào git directory, tuy nhiên bạn nhận thấy file freetuts.txt không cần thiết để đưa vào commit thì lúc này bạn sẽ thực hiện các bước sau để loại bỏ nó ra khỏi stage.

Trước tiên bạn hãy gõ lệnh sau để xem hướng dẫn của git.

$ git status

Kết quả sẽ trả về như sau:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   freetuts.txt
        new file:   freetutsdotnet.txt

Câu use "git reset HEAD <file>..." to unstage ý muốn nói bạn hãy sử dụng lệnh git reset HEAD để loại bỏ một file ra khỏi stage. Như trên mình sẽ loại bỏ file freetus.txt bằng lệnh sau:

$ git reset HEAD freetuts.txt

Bạn thử gõ lệnh git status xem có thay đổi gì không nhé, kết quả như sau:

On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   freetutsdotnet.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        freetuts.txt

Kể quả bảo rằng bạn đã loại bỏ 1 file ra khỏi stage, muốn thêm nó vào lại stage thì dùng lệnh add.

3. Lời kết

Như vậy để bổ sung vào commit cuối cùng thì ta sử dụng lệnh commit nhưng thêm tham số -amend vào phía sau $ git commit --amend, sau đó làm theo hướng dẫn trên màn hình của editor.  Muốn loại bỏ một file ra khỏi stage thì sử dụng lệnh $ git reset HEAD <file_name>.

Khóa học nên xem

Nguồn: freetuts.net