Bài 11. Khôi phục commit với Reset và Revert

Giới thiệu

Trong bài viết này chúng ta sẽ tập trung vào cách thức để khôi phục commit trong dòng lịch sử của git. Thao tác này sẽ giúp chúng ta trở lại những thời điểm trước một sai lầm trong code, còn trong hệ thống devops thao tác này được sử dụng như một cách thức khôi phục lại phiên bản ứng dụng trước đó.

Chuẩn bị

  • Đã hoàn thành bài trước.
  • Terminal kết nối SSH tới máy Ubuntu.
  • Đã có Repository trên Ubuntu (Bài viết sử dụng FirstProjectGit).

Nội dung

Các thao tác trong viết sẽ thực hiện trên nhánh dev

git checkout dev
git pull origin dev
git push origin dev

 

Git Reset

1. Tạo các commit và đưa vào dòng lịch sử của Git

Tạo các commit A, B, C, D

# commit 
echo "file a" > file_a
git add file_a
git commit -m "A"

echo "file b" > file_b
git add file_b
git commit -m "B"

echo "file c" > file_c
git add file_c
git commit -m "C"

echo "file d" > file_d
git add file_d
git commit -m "D"

 

push lên remote

git push origin dev

 

Xem danh sách commit

# Kiểm tra tệp tin
ls -al

# xem danh sách commit
git log

 

Bạn hãy sao chép commit id của commit B, id này sẽ được sử dụng ngay sau đây.

2. Thực hiện reset về commit B

Chúng ta sẽ sử dụng option --hard để loại bỏ tất cả sự thay đổi của các commit C và D

git reset --hard <commit_b_id>

 

Kiểm tra:

  • Trong repo, chỉ có tệp tin file_a và file_b, vì với --hard các tệp tin được tạo ở commit C và D sẽ không được giữ lại.
  • Trong git history, chỉ còn 2 commit A và B, 2 commit C và D đã bị xóa.
ls -al
git log

 

3. Push thay đổi lên remote

Quá trình push này giống như việc chúng ta xóa commit C và D trên remote, vì vậy bạn cần thêm tham số -f để push thành công từ local tới remote.

git push -f origin dev

 

Sau câu lệnh, bạn hãy kiểm tra tệp tin và lịch sử commit trên nhánh dev Github repo FirstProjectGit

Git Revert

1. Chuẩn bị commit trong dòng lịch sử git

Hiện tại chúng ta đã có 2 commit A và B, chúng ta tạo lại 2 commit C và D

echo "file c" > file_c
git add file_c
git commit -m "C"

echo "file d" > file_d
git add file_d
git commit -m "D"

 

push lên remote

git push origin dev

 

Kiểm tra tệp tin và git log

ls -al
git log

 

 

2. Thực hiện revert

Mục tiêu: chúng ta sẽ thực hiện đưa commit b trở lại:

Thực hiện revert commit D, tức là chúng ta sẽ tạo ra commit D’ .
Trong bản chất commit này sẽ loại bỏ những thay đổi trong commit D, và đưa HEAD về trạng thái giống như đang ở commit C, hay nói cách khác, chúng ta vừa thực hiện revert về commit C

git revert <commit_d_id>
# tệp tin mở ra để thêm message và tạo commit mới D phẩy
ls -al
git log

 

Tương tự, tiếp tục revert commit C(revert về commit B)

git revert <commit_c_id>
# tệp tin mở ra để thêm message và tạo commit mới C phẩy
ls -al
git log

 

Sau 2 bước revert, trạng thái của nhánh staging đã trở về giống như commit B, và history của git được bảo toàn.

3. Push thay đổi lên remote

Vì không phải xóa đi commit nào, tất cả là thêm mới, chúng ta có thể chạy lệnh git push một cách bình thường.

git push origin dev

 

Sau câu lệnh, bạn hãy kiểm tra tệp tin và lịch sử commit trên nhánh staging ở Github repo test-repo

 

 


Tác giả: Đỗ Thiên Giang

Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.

Lên trên