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.
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.
Tags:
Bài viết liên quan
Hiểu về AI, LLM, RAG và Agentic RAG trong 15 phút
Trong vài năm gần đây, trí tuệ nhân tạo (AI) đã bùng nổ mạnh mẽ và trở thành tâm điểm của cả thế giới công nghệ. Nhưng đi kèm với nó là hàng loạt khái niệm mới như LLM, RAG, hay Agentic RAG khiến nhiều người mới bắt đầu cảm thấy lúng túng.
Đọc thêm
Hướng dẫn tự triển khai N8N trên CentOS bằng Docker Compose và NGINX
N8N là công cụ mã nguồn mở cho phép bạn tự động hóa quy trình làm việc (workflow automation) và tích hợp nhiều dịch vụ khác nhau mà không cần phải lập trình.
Đọc thêm
Hướng dẫn phân tích độ phức tạp thuật toán chi tiết
Độ phức tạp của giải thuật là một cách để đánh giá hiệu quả của một giải thuật dựa trên hai yếu tố chính là độ phức tạp thời gian và độ phức tạp không gian.
Đọc thêm
Bài 6. Các thao tác với XPath và Selector trong Selenium
Bài viết này hướng dẫn bạn làm việc XPath và Css Selector trong Selenium.
Đọc thêm
Bài 5. Các thao tác với Web Browser trong Selenium
Bài viết này hướng dẫn bạn làm việc sâu Web Browser trong Selenium.
Đọc thêm
Bài 4. Thực thi Javascript trong Selenium
Bài viết này hướng dẫn bạn thực thi lệnh Javascript trong Selenium.
Đọc thêm
Bài 3. Làm việc với Element trong Selenium
Bài viết này hướng dẫn bạn làm việc với Element trong Selenium.
Đọc thêm
Bài 2. Các thao tác cơ bản về Selenium
Bài viết này hướng dẫn bạn tạo dự án Selenium C# và thực hiện thao tác cơ bản.
Đọc thêm
Bài 1. Giới thiệu về Selenium
Bài viết giới thiệu sơ lược về chuỗi bài Selenium.
Đọc thêm
Bài 18. Xây dựng Docker Compose .NET Core Và SQL Server
Hướng dẫn xây dựng Docker Compose .NET Core Và SQL Server
Đọc thêm