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.
Terminalkết nốiSSHtới máyUbuntu.- Đã có
RepositorytrênUbuntu(Bài viết sử dụngFirstProjectGit).
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"
Và 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_avàfile_b, vì với--hardcá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"
Và 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.