+3

Kinh nghiệm Git: Phải làm sao khi bị "Revert" và bay luôn nhánh code?

Là một Developer, chắc hẳn ai cũng ít nhất một lần trải qua cảm giác "toát mồ hôi hột" khi code của mình bỗng dưng bốc hơi khỏi hệ thống. Hôm nay, mình sẽ chia sẻ một "pha xử lý đi vào lòng đất" rất phổ biến khi làm việc với Git và cách cứu vãn tình hình một cách ngầu nhất.

📍 Bối cảnh: Khi nỗ lực bị... "phủ nhận"

Câu chuyện thường diễn ra theo một kịch bản rất quen thuộc như sau:

  • Bạn hì hục code xong một tính năng trên nhánh feature/...
  • Bạn tự tin tạo Pull Request (PR) merge code lên nhánh develop (hoặc qc).
  • Mọi thứ test thành công, code được merge, và theo thói quen (hoặc hệ thống tự động), nhánh feature cũ bị xóa đi cho sạch sẽ.
  • Bất ngờ thay, Manager hoặc Leader phát hiện có lỗi (conflict, bug phát sinh, v.v.) nên đã quyết định Revert lại cái PR đó trên nhánh chính.

Vấn đề phát sinh: Bạn cần lấy lại code để sửa tiếp và đẩy lên lại. Nếu bạn chỉ khôi phục nhánh cũ trên giao diện web và tạo lại PR, Git sẽ phũ phàng báo: "No changes to merge".

Tại sao ư? Vì các commit của bạn đã tồn tại trong lịch sử của nhánh chính rồi. Cái commit "Revert" của Manager chỉ đơn giản là tạo ra một thay đổi mới để xóa đi những gì bạn đã viết. Git hiểu là bạn không có code mới nào cả.

🛠️ Cách khắc phục: Kỹ thuật "Revert lại cái Revert"

Đừng hoảng! Trong Git, code không bao giờ mất đi trừ khi bạn cố tình tiêu hủy nó ở mức độ hệ thống. Giải pháp chuyên nghiệp và sạch sẽ nhất trong trường hợp này chính là: Phủ nhận lại chính hành động phủ nhận của Manager.

Dưới đây là các bước thực hiện chi tiết:

Bước 1: Tìm mã commit đã revert code của bạn

  • Mở công cụ quản lý Git (như Fork, SourceTree) hoặc giao diện web.
  • Tìm đến nhánh chính (nơi code vừa bị revert).
  • Lấy mã hash (SHA) của commit revert đó. Mã này thường có dạng đoạn mã dài (VD: 1d1fad6be362e...) hoặc bản rút gọn 7 ký tự (VD: 1d1fad6). Tên commit thường bắt đầu bằng chữ "Revert:...".

Bước 2: Chạy lệnh Revert

  • Mở Terminal/Console và checkout về đúng nhánh bạn muốn làm việc (nhánh feature đã được khôi phục hoặc tạo nhánh mới từ develop).
  • Gõ lệnh sau:
git revert <mã-hash-của-commit-revert>

(Ví dụ: git revert 1d1fad6)

Bước 3: Xử lý giao diện dòng lệnh (Vim)

  • Sau khi gõ lệnh trên, Git sẽ kéo toàn bộ file code của bạn về lại và mở một trình soạn thảo (thường là Vim) để bạn chốt lời nhắn commit.
  • Lời nhắn mặc định đã rất chuẩn rồi (VD: Reapply "feat:..."). Để thoát ra và lưu lại, bạn chỉ cần thao tác đúng 3 nhịp:
  1. Bấm phím Esc
  2. Gõ :wq
  3. Bấm Enter

Bước 4: Đẩy code và tạo PR mới

  • Lúc này, toàn bộ code cũ đã an tọa đầy đủ dưới dạng một commit mới toanh trên máy của bạn.
  • Việc cuối cùng chỉ là đẩy nhánh lên server:
git push origin <tên-nhánh-của-bạn>
  • Lên GitHub/GitLab tạo Pull Request mới. Lần này Git sẽ hoan nghênh code của bạn với đầy đủ các thay đổi!

Bài học rút ra

  • Đừng vội hoảng sợ: Code mất trên giao diện không có nghĩa là mất trong Git.
  • Đọc kỹ thông báo của Terminal: Git luôn gợi ý cho bạn biết nó đang ở trạng thái nào.
  • Làm chủ lệnh Revert: Revert là một công cụ mạnh mẽ giúp quay ngược thời gian một cách an toàn mà không làm hỏng lịch sử commit của team, ưu việt hơn rất nhiều so với lệnh Reset.

Chúc các bạn code vui và không bao giờ phải chịu cảm giác thót tim vì Git!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí