Computer >> Máy Tính >  >> Lập trình >> Lập trình

Cam kết hoàn nguyên Git:Hướng dẫn từng bước

Lệnh git revert sẽ hoàn tác một cam kết để bạn có thể trả lại một kho lưu trữ về cam kết trước đó. Thay vì xóa cam kết, hoàn nguyên sẽ tạo một cam kết mới sẽ đảo ngược các thay đổi của một cam kết đã xuất bản. Điều này bảo tồn cam kết ban đầu như một phần lịch sử của dự án.


Khi bạn đang làm việc với kho lưu trữ Git, bạn có thể vô tình tạo một cam kết với mã chưa sẵn sàng để lưu trữ trong kho lưu trữ Git của bạn.

Đó là nơi xuất hiện lệnh git revert. Lệnh git revert cho phép bạn undo một cam kết để bạn có thể trả lại một kho lưu trữ cho cam kết trước đó.

Hướng dẫn này sẽ thảo luận, với các ví dụ, hoàn nguyên mã và cách sử dụng lệnh git revert để hoàn nguyên mã của bạn. Khi đọc xong hướng dẫn này, bạn sẽ trở thành một chuyên gia trong việc hoàn nguyên mã bằng lệnh git revert commit.

Hoàn nguyên mã của bạn

Đôi khi, khi bạn đang làm việc với hệ thống lưu trữ Git, bạn có thể nhận thấy rằng bạn đã mắc lỗi trong cam kết của mình.

Ví dụ:giả sử bạn vừa làm xong một tính năng mới và nhận ra rằng có một lỗi cần được sửa. Khi bạn cam kết sửa lỗi, bạn cũng nhận thấy rằng bạn đã cam kết thư mục làm việc cho tính năng mới mà bạn đang phát triển.

Điều này có nghĩa là cam kết của bạn bao gồm cả bản sửa lỗi và tính năng mới, điều này có thể khiến các cộng tác viên khác trong dự án khó hiểu. Thay vì cam kết cả hai thay đổi này cùng một lúc, bạn muốn đưa chúng vào hai cam kết riêng biệt.

Trong trường hợp này, bạn có thể muốn hoàn nguyên kho lưu trữ của mình về trạng thái trước khi bạn đẩy cam kết. Điều này sẽ cho bạn một cơ hội khác để đẩy các cam kết của bạn trong git bằng cách hoàn nguyên cam kết cuối cùng.

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia một cuộc thi đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình đã dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

Lệnh hoàn nguyên Git

Lệnh git revert cho phép bạn undo một cam kết. Tuy nhiên, thay vì xóa một cam kết khỏi một dự án, lệnh git revert tìm những thay đổi giữa hai cam kết cuối cùng và tạo một cam kết mới để đảo ngược những thay đổi đó.

Lệnh git revert rất hữu ích vì nó cho phép bạn lưu giữ lịch sử dự án của một kho lưu trữ. Thay vì xóa hoàn toàn một cam kết, nó cho phép bạn hoàn nguyên một kho lưu trữ thành một cam kết khác, vì vậy bạn vẫn có thể giữ một bản ghi chính xác về mọi cam kết mà bạn đã đẩy vào một kho lưu trữ.

Bạn nên sử dụng lệnh git revert trong các tình huống mà bạn muốn đảo ngược lần cam kết cuối cùng của mình. Thay vì thực hiện thủ công các thay đổi bạn cần thực hiện cho lần cam kết cuối cùng của mình, bạn có thể hoàn nguyên cam kết của mình và đẩy một cam kết mới vào codebase.

Cú pháp của lệnh git revert như sau:

 git hoàn nguyên 

Hãy xem qua một ví dụ để minh họa cách hoạt động của lệnh này.

Ví dụ về hoàn nguyên Git

Trên máy cục bộ của chúng tôi, chúng tôi có một kho lưu trữ ví dụ với một tệp:README.md. Chúng tôi vừa thực hiện một thay đổi đối với tệp mà chúng tôi muốn đẩy sang cam kết. Chúng tôi có thể làm như vậy bằng cách sử dụng mã này:

 git commit -m "docs:Cập nhật README.md với thông tin tác giả" 

Lệnh này, khi được thực thi, sẽ tạo một cam kết với thông báo docs: Update README.md with author info . Chúng tôi cũng vừa thực hiện một thay đổi khác đối với tệp README.md của chúng tôi, mà chúng tôi cam kết với repo của chúng tôi bằng cách sử dụng lệnh này:

 git commit -m "docs:Cập nhật thứ tự của các tác giả theo đóng góp" 

Lệnh này tạo một cam kết khác trong kho lưu trữ của chúng tôi. Nếu chúng tôi sử dụng lệnh git log –pretty =oneline (hiển thị cho chúng tôi danh sách ngắn các cam kết của chúng tôi), chúng tôi có thể thấy rằng có hai cam kết trong lịch sử repo của chúng tôi:

Tài liệu
 6f52d877873e7d3b52c929647384dfdf2488da22 (HEAD -> chính):Cập nhật thứ tự tác giả theo đóng góp57d763663e619088159bb7629243456f88feab79 tài liệu:Cập nhật README.md với thông tin tác giả 

Bây giờ, giả sử chúng ta quyết định rằng chúng ta muốn hoàn nguyên cam kết cuối cùng của mình. Chúng tôi nhận thấy rằng thứ tự mà chúng tôi đã viết các tác giả trong tệp README.md của chúng tôi không chính xác và vì vậy chúng tôi cần hoàn nguyên kho lưu trữ của mình về trạng thái như trước khi chúng tôi đẩy cam kết cuối cùng của mình.

Chúng tôi có thể làm như vậy bằng cách sử dụng lệnh này:

 git hoàn nguyên HEAD 

Khi chúng tôi chạy lệnh này, trình soạn thảo văn bản mặc định của chúng tôi sẽ mở ra và nhắc chúng tôi tạo một thông báo cho cam kết của chúng tôi. Trong lệnh này, HEAD đề cập đến cam kết mới nhất. Trong ví dụ của chúng tôi, chúng tôi nhập thông báo revert author order commit . Sau đó, lệnh trả về như sau:

 [master b66c29a] hoàn nguyên thứ tự tác giả cam kết "tài liệu:Cập nhật thứ tự tác giả theo đóng góp" 1 tệp đã thay đổi, 1 lần xóa (-) 

Bây giờ, khi chúng ta chạy lệnh git log –pretty =oneline, chúng ta có thể thấy một cam kết mới đã được tạo:

 b66c29a8c4c226fa9ae8cd8f9e086c0a73e6ecfe (HEAD -> master) revert author order commit "docs:Cập nhật thứ tự của các tác giả theo đóng góp" 6f52d877873e7d3b52c929647384dfbbdf2488da22 tài liệu:Cập nhật thứ tự của tác giả theo đóng góp của docs57d7903ADME159793e57d7d763 

Lịch sử cam kết của chúng tôi hiện liệt kê ba cam kết. Thay vì xóa cam kết cuối cùng của chúng tôi, lệnh git revert đã tạo một cam kết mới đã hoàn tác các thay đổi của cam kết trước đó. Điều này có nghĩa là chúng tôi vẫn có lịch sử đầy đủ về tất cả các cam kết mà chúng tôi đã đẩy vào kho lưu trữ của mình.

Lệnh git revert cần một tham chiếu cam kết để thực thi. Trong trường hợp này, chúng tôi đã chỉ định HEAD, điều này sẽ hoàn nguyên kho lưu trữ của chúng tôi về lần cam kết cuối cùng.

Nếu chúng tôi muốn hoàn nguyên về một cam kết khác, chúng tôi có thể chỉ định giá trị băm cho cam kết đó. Vì vậy, thay vì nêu rõ HEAD trong lệnh của chúng tôi, chúng tôi có thể sử dụng một hàm băm được trả về bởi lệnh git log để hoàn nguyên về cam kết mà chúng tôi đã chọn. Dưới đây là một ví dụ về lệnh mà chúng tôi sẽ sử dụng để hoàn nguyên kho lưu trữ về một cam kết cụ thể:

 git hoàn nguyên 57d763663e619088159bb7629243456f88feab79 

Lệnh này sẽ hoàn nguyên kho lưu trữ của chúng tôi về cam kết với hàm băm SHA 57d763663e619088159bb7629243456f88feab79 . Trong kho lưu trữ này, băm đó tương ứng với cam kết đầu tiên mà chúng tôi đã thực hiện cho kho lưu trữ của mình.

Hoàn nguyên Git so với Đặt lại

Các lệnh hoàn nguyên và đặt lại đều được sử dụng để hoàn tác các thay đổi so với các cam kết trước đó trong kho lưu trữ Git. Tuy nhiên, bạn nên biết rằng các lệnh này có các hành vi hơi khác nhau.

Thao tác dòng lệnh git revert được sử dụng để hoàn tác cam kết trước đó. Khi bạn chạy git revert, các thay đổi giữa hai lần cam kết sẽ được hoàn tác. Sau đó, một cam kết mới được tạo chứa mã trong kho của bạn sau khi các thay đổi đã được hoàn tác.

Mặt khác, lệnh git reset sẽ hoàn nguyên kho lưu trữ về trạng thái trước đó bằng cách xóa tất cả các cam kết giữa một phạm vi nhất định. Vì vậy, nếu bạn chạy git reset và tham chiếu một cam kết trước đó, tất cả các cam kết giữa trạng thái hiện tại của kho lưu trữ và cam kết đó sẽ bị xóa.

Hoàn nguyên một cam kết thường được ưu tiên hơn là đặt lại một cam kết. Lý do chính là vì git revert không thay đổi lịch sử dự án của bạn. Điều này cho phép bạn, nhà phát triển, duy trì bản ghi chính xác về tất cả các thay đổi được thực hiện đối với một dự án.

Ngoài ra, lệnh git revert cho phép bạn hoàn nguyên về một cam kết riêng lẻ tại một thời điểm nhất định trong lịch sử kho lưu trữ của bạn. Mặt khác, lệnh git reset chỉ hoạt động trở lại từ cam kết mà bạn hiện đang sử dụng.

Điều này có nghĩa là, nếu bạn muốn hoàn tác một cam kết trong lịch sử kho lưu trữ của mình, bạn sẽ phải xóa tất cả các cam kết trước thời điểm đó, sau đó cam kết các thay đổi của bạn. Điều này gây khó khăn cho việc lưu giữ một bản ghi chính xác về lịch sử của kho lưu trữ của bạn, đây là một phần quan trọng của việc sử dụng hiệu quả các công cụ kiểm soát nguồn như Git.

Kết luận

Lệnh git revert cho phép bạn hoàn tác những thay đổi bạn đã thực hiện đối với kho lưu trữ mã kể từ một cam kết cụ thể. Thay vì xóa một cam kết, lệnh git revert xác định những thay đổi giữa cam kết hiện tại và một cam kết trước đó và tạo một cam kết mới để hoàn nguyên những thay đổi đó.

Hướng dẫn này thảo luận về cách sử dụng lệnh git revert để hoàn nguyên một cam kết trong Git. Bây giờ, bạn đã sẵn sàng để bắt đầu hoàn nguyên các cam kết bằng lệnh git revert commit như một nhà phát triển chuyên nghiệp!