Android

Git, Bài 3: Xem lịch sử chỉnh sửa và hoàn tác

git_logo

Trong bài thứ 2, tôi đã giới thiệu các thao tác cơ bản của Git, bao gồm add, rm và commit. Còn trong bài này, chúng ta sẽ xem lịch sử các commits và hoàn tác (revert) lại hệ thống project của bạn lại tại một thời điểm bạn đã commit trước, mà chưa cần sử dụng tới nhánh (branch). Phần nhánh và Repo Hub, tôi sẽ nói trong bài viết cuối cùng sắp tới.

1. Xem lịch sử các commits:

Giữa bài trước và bài này,  bạn đã thêm, sửa, xóa các tập tin trong project, và thực hiện khá nhiều commits khác nhau. Và bây giờ, bạn sẽ chuẩn bị tổng kết project để tiến hành build và phát hành. Đối với một LTV chuyên nghiệp, thì việc cung cấp changelog khi cập nhật sản phẩm của mình lên phiên bản mới là điều mà ai cũng muốn làm, không chỉ nhằm tạo sự tin tưởng từ người dùng, “Tay LTV này là một người có trách nhiệm cao, nên hẳn là trình độ cũng cao đó và ứng dụng này sẽ chạy ổn đây.”, mà còn là lúc mà bạn tự nhìn nhận lại bản thân đã làm được những gì mới và sửa chữa những lỗi nào. Nếu mỗi lần bạn commit là mỗi lần bạn có ghi chú lại đầy đủ (nhưng ngắn gọn, xin xem bài trước) các thông tin, thì việc xem commit history sẽ giúp bạn đỡ phải suy nghĩ vất vả, đỡ phải cố gắng nhớ lại quá trình viết code vừa qua.

Để xem commit history, thì bạn chỉ đơn giản là chạy câu lệnh như bên dưới. Yêu cầu duy nhất là bạn đang trỏ vào thư mục project.

Nếu có nhiều commits, và việc các dòng “nhảy ra quay vô” làm bạn khó chịu, thì bạn sẽ thêm một flag có tên là –oneline. Để xem hướng dẫn về các flags khác, bạn chỉ cần dùng flag –help.

Dưới đây là một log của Project RotationLock của tôi dưới dạng oneline. Log trên màn hình của bạn sẽ tương tự.

Bạn để ý các con số dạng thập lục phân. Chúng chính là các commit_id. Để xem thông tin chi tiết hơn về mỗi lần commit, bạn sẽ cần chúng. Ví dụ, tôi muốn xem lại là mình đã làm gì khi thực hiện commit de8dcda, thì tôi sẽ checkout nó như bên dưới, và bạn có thể áp dụng tương tự cho các commit_ids của bạn.

2. Hoàn tác:

Giả sử bây giờ bạn muốn hoàn tác lại, vì bạn càng thêm tính năng thì tự dưng ứng dụng trở nên kém ổn định và xuất hiện thêm hàng hà các lỗi khác nhau khiến bạn xanh mặt đỏ mắt mà vẫn chưa sửa xong nên quyết định… dẹp luôn cho khỏe. Và một lần nữa, bạn phải cần tới các commit_ids, lần này không phải là với lệnh checkout, mà sẽ là revert.

Trước mặt bạn là một tập tin dạng text được mở trong Cửa sổ dòng lệnh. Bạn chỉ cần lưu nó lại (theo hướng dẫn tương ứng của HĐH của bạn) và Git sẽ tiến hành “quay ngược thời gian” lại project. Tuy nhiên, cái hay ở đây không phải là “quay ngược thời gian” một cách hoàn toàn, mà nó sẽ tạo một commit mới, và dĩ nhiên là bạn có thể đưa project về trạng thái vừa rồi vẫn được. Do đó, bạn có “lỡ dại” mà revert thì cũng không mất code theo kiểu hoàn toàn đâu mà sợ. Hoan hô Git.

Tuy nhiên, bạn vẫn có thể “quay ngược thời gian” một cách hoàn toàn. Và lần này, sự thay đổi sẽ “một đi không trở lại”, nên tôi khuyến nghị bạn phải thực sự chắc chắn khi thực hiện thao tác này. Hãy suy nghĩ cho kĩ, và có làm rồi thì đừng lên trang EITGUIDE này mà đổ thừa là tôi xui dại. Thay vì chọn revert, bạn nhập lệnh reset, và lần này là reset thật sự. Các commits sau thời điểm bạn lựa chọn sẽ bị xóa vĩnh viễn, project sẽ trở lại đúng trạng thái tại thời điểm commit đó. Tuy nhiên, có một điều là tất cả các tập tin đang được mở (bằng các ứng dụng khác) sẽ không bị ảnh hưởng và nếu đang mở tập tin nào, thì nội dung của nó sẽ vẫn còn đó. Còn nếu bạn muốn “làm cho tới bến” thì thêm flag –hard vào cuối câu lệnh. Vì tính chất “nguy hiểm” của reset mà tôi sẽ không đưa ra câu lệnh minh họa nào ở đây.

Sang bài tiếp theo, tôi sẽ nói về các nhánh (branch). Bật mí một chút là các branch là công cụ hữu hiệu, ở thời điểm hiện tại thì có thể là hữu hiệu nhất, cho việc phân công thực hiện cũng như “lắp ráp”, tổng hợp từng phần của project.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.