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ốiSSH
tới máyUbuntu.
- Đã có
Repository
trê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_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"
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.