Thuật ngữ đặt lại(reset) là viết tắt của việc hoàn lại những thay đổi. Lệnh git reset được sử dụng để đặt lại các thay đổi. Lệnh git reset có ba hình thức gọi chính. Các hình thức này như sau.
- Mềm mại(soft)
- Hỗn hợp(mixed)
- Cứng(hard)
Nếu chúng ta nói về phương diện Git, thì Git là một công cụ đặt lại trạng thái hiện tại của HEAD thành một trạng thái xác định. Nó là một công cụ tinh vi và linh hoạt để hoàn lại các thay đổi. Nó hoạt động như một cỗ máy thời gian cho Git . Bạn có thể nhảy lên và qua lại giữa các commit khác nhau. Mỗi biến thể đặt lại này ảnh hưởng đến các cây cụ thể mà git sử dụng để xử lý file của bạn trong nội dung của nó.
Ngoài ra, git reset có thể hoạt động trên toàn bộ đối tượng commit hoặc ở cấp file riêng lẻ. Mỗi biến thể đặt lại này ảnh hưởng đến các cây cụ thể mà git sử dụng để xử lý file của bạn và nội dung của nó.
Git sử dụng một chỉ mục(index) (khu vực dàn dựng), HEAD và thư mục làm việc để tạo và hoàn ra các commit. Nếu bạn không biết gì về Head, cây, chỉ mục, thì hãy truy cập vào đây Git Index và Git Head .
Thư mục làm việc cho phép bạn thay đổi file và bạn có thể đưa vào chỉ mục(index). Khu vực tổ chức cho phép bạn chọn những gì bạn muốn đưa vào commit tiếp theo của mình. Đối tượng commit là phiên bản nội dung được băm bằng mật mã. Nó có một số Siêu dữ liệu và điểm được sử dụng để bật các commit trước đó.
Chúng ta sẽ tìm hiểu các cách sử dụng khác nhau của lệnh git reset.
Nội dung chính
1. Git Reset Hard
Đầu tiên, nó sẽ di chuyển Head và cập nhật chỉ mục(index) với nội dung của các commit. Đây là tùy chọn trực tiếp, không an toàn và được sử dụng thường xuyên nhất. Tùy chọn –hard thay đổi Lịch sử commit và các con trỏ tham chiếu được cập nhật thành commit được chỉ định. Sau đó, Chỉ mục(index) giai đoạn và Thư mục làm việc cần phải đặt lại để phù hợp với commit được chỉ định. Bất kỳ commit nào đang chờ xử lý trước đó đối với Chỉ mục(index) giai đoạn và Thư mục làm việc sẽ được đặt lại để khớp với Cây commit. Nó có nghĩa là bất kỳ công việc đang chờ đợi sẽ bị mất.
Cùng hiểu tùy chọn –hard với một ví dụ sau. Giả sử tôi đã thêm một file mới vào kho lưu trữ hiện có của mình. Để thêm file mới vào kho, hãy chạy lệnh dưới đây:
git add <tên file>
Để kiểm tra trạng thái của kho lưu trữ, hãy chạy lệnh dưới đây:
git status
Để kiểm tra trạng thái của Head và các commit trước đó, hãy chạy lệnh dưới đây:
git log
Hãy xem xét hình ảnh dưới đây:
Trong đầu ra ở trên, tôi đã thêm một file có tên newfile3.txt . Tôi đã kiểm tra trạng thái của kho lưu trữ. Chúng ta có thể thấy rằng vị trí người đứng đầu hiện tại vẫn chưa thay đổi bởi vì tôi đã không commit thay đổi. Bây giờ, tôi sẽ thực hiện tùy chọn reset –hard . Lệnh hard reset git sẽ được thực hiện như sau:
git reset--hard
Hãy xem xét đầu ra dưới đây:
Như bạn có thể thấy trong đầu ra ở trên, tùy chọn -hard được vận hành trên kho lưu trữ có sẵn. Tùy chọn này sẽ thiết lập lại các thay đổi và khớp với vị trí của Head trước các thay đổi cuối cùng. Nó sẽ xóa các thay đổi có sẵn khỏi khu vực tổ chức(origin). Hãy xem xét đầu ra dưới đây:
Đầu ra ở trên hiển thị trạng thái của kho lưu trữ sau khi khôi phục cài đặt gốc. Chúng ta có thể thấy không có gì để commit trong kho lưu trữ của tôi vì tất cả các thay đổi bị xóa bởi tùy chọn đặt lại cứng để phù hợp với trạng thái của Head với trước đó. Vậy là tập tin newfile3.txt đã bị xóa khỏi kho.
Có một cách an toàn hơn để đặt lại các thay đổi với sự trợ giúp của git stash .
Nói chung, chế độ đặt lại cứng(reset hard) thực hiện các hoạt động dưới đây:
- Nó sẽ di chuyển con trỏ HEAD.
- Nó sẽ cập nhật Khu vực dàn dựng với nội dung mà HEAD đang trỏ.
- Nó sẽ cập nhật thư mục làm việc để phù hợp với Staging Area.
2. Git Reset hỗn hợp
Một tùy chọn hỗn hợp là một tùy chọn mặc định của lệnh git reset. Nếu chúng ta không có bất kỳ đối số nào, thì lệnh git reset được coi là –mixed làm tùy chọn mặc định. Một tùy chọn hỗn hợp cập nhật các con trỏ tham chiếu. Khu vực dàn dựng cũng được đặt lại về trạng thái của một commit được chỉ định. Các thay đổi đã hoàn tác được chuyển vào thư mục làm việc. Chúng ta sẽ tìm hiểu nó với một ví dụ.
Hãy tạo một file mới nói newfile3.txt . Kiểm tra trạng thái của kho lưu trữ. Để kiểm tra trạng thái của kho lưu trữ, hãy chạy lệnh dưới đây:
git status
Nó sẽ hiển thị file chưa được theo dõi từ khu vực dàn dựng. Thêm nó vào chỉ mục(index). Để thêm file vào chỉ mục(index) giai đoạn, hãy chạy lệnh git add như:
git add <tên file>
Lệnh trên sẽ thêm file vào chỉ mục dàn dựng. Hãy xem xét đầu ra dưới đây:
Trong đầu ra ở trên, tôi đã thêm một newfile3.txt vào kho lưu trữ cục bộ của mình. Bây giờ, chúng ta sẽ thực hiện lệnh đặt lại hỗn hợp trên kho này. Nó sẽ hoạt động như sau:
git reset --mixed
Hoặc chúng ta có thể chỉ sử dụng lệnh git reset thay vì lệnh này.
git reset
Lệnh trên sẽ thiết lập lại trạng thái của Đầu, và nó sẽ không xóa bất kỳ dữ liệu nào khỏi khu vực dàn dựng để khớp với vị trí của Đầu. Hãy xem xét đầu ra dưới đây:
Từ kết quả trên, chúng ta có thể thấy rằng chúng ta đã thiết lập lại vị trí của Head bằng cách thực hiện lệnh git reset -mixed. Ngoài ra, chúng ta đã kiểm tra trạng thái của kho lưu trữ. Như chúng ta có thể thấy rằng trạng thái của kho lưu trữ không bị thay đổi bởi lệnh này. Vì vậy, rõ ràng là chế độ hỗn hợp không xóa bất kỳ dữ liệu nào khỏi khu vực tổ chức(origin).
Nói chung, chế độ hỗn hợp được đặt lại thực hiện các hoạt động dưới đây:
- Nó sẽ di chuyển con trỏ HEAD
- Nó sẽ cập nhật Staging Area với nội dung mà HEAD đang trỏ tới.
Nó sẽ không cập nhật thư mục làm việc như chế độ git reset hard. Nó sẽ chỉ đặt lại chỉ mục(index) chứ không phải cây làm việc, sau đó nó tạo báo cáo về các file chưa được cập nhật.
Nếu -N được chỉ định trên dòng lệnh, thì các câu lệnh sẽ được Git coi là ý định bổ sung.
3. Git Reset Head (Git Reset Soft)
Tùy chọn mềm hoàn toàn không chạm vào file chỉ mục(index) hoặc cây làm việc, nhưng nó đặt lại Head như tất cả các tùy chọn khác. Khi chế độ mềm chạy, con trỏ tham chiếu được cập nhật và việc đặt lại dừng ở đó. Nó sẽ hoạt động như lệnh git rev. Nó không phải là một lệnh có thẩm quyền. Đôi khi các developer coi đó là một sự lãng phí thời gian.
Nói chung, nó được sử dụng để thay đổi vị trí của Head. Chúng ta sẽ tìm hiểu nó sẽ thay đổi vị trí của Head như thế nào. Nó sẽ sử dụng như:
git reset - soft <commit-sha>
Lệnh trên sẽ di chuyển HEAD đến commit cụ thể. Chúng ta sẽ tìm hiểu nó với một ví dụ.
Tôi đã thực hiện các thay đổi trong file newfile3.txt của mình và commit nó. Vì vậy, vị trí Head hiện tại được thay đổi theo commit mới nhất. Để kiểm tra trạng thái của Head, hãy chạy lệnh dưới đây:
git log
Hãy xem xét đầu ra dưới đây:
Từ đầu ra ở trên, bạn có thể thấy rằng vị trí hiện tại của HEAD là trên 0ba5e5367f947a6aafd48be762fd3dcac9feb7d8 commit. Tuy nhiên, tôi muốn chuyển nó trên commit cũ hơn của mình 7c38f875f1205b08e687990de2236aac9d803fd1. Vì số commit-sha là một số duy nhất được cung cấp bởi thuật toán sha. Để chuyển HEAD, hãy chạy lệnh dưới đây:
git reset --soft 7c38f875f1205b08e687990de2236aac9d803fd1
Lệnh trên sẽ chuyển HEAD của tôi thành một commit cụ thể. Hãy xem xét đầu ra dưới đây:
Như bạn có thể thấy từ đầu ra ở trên, HEAD đã được chuyển sang một commit cụ thể bằng chế độ git reset –soft.
4. Git Reset để commit
Đôi khi chúng ta cần đặt lại một commit cụ thể; Git cho phép chúng tôi làm như vậy. Chúng ta có thể đặt lại thành một commit cụ thể. Để thiết lập lại nó, lệnh git reset có thể được sử dụng với bất kỳ tùy chọn nào được hỗ trợ bởi lệnh reset. Nó sẽ thực hiện hành vi mặc định của một lệnh cụ thể và đặt lại commit đã cho. Cú pháp để đặt lại commit được đưa ra dưới đây:
git reset <option> <commit-sha>
Các tùy chọn này có thể
- –soft
- –mixed
- –hard
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Tài liệu từ cafedev:
- Full series tự học Git từ cơ bản tới nâng cao tại đây nha.
- Ebook về Git tại đây.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!