Courses
Nếu bạn là người dùng Git tích cực như tôi, có lẽ bạn đã tích lũy cả đống nhánh cũ. Có nhánh đã được gộp, có nhánh bị bỏ dở, và có nhánh bạn thậm chí không nhớ mình đã tạo. Giữ những nhánh đó tưởng chừng không sao, nhưng theo thời gian, chúng có thể làm lộn xộn kho lưu trữ của bạn và khiến việc theo dõi công việc đang hoạt động trở nên khó hơn.
Trong hướng dẫn này, tôi sẽ giải thích cách xóa nhánh Git trên máy cục bộ và từ xa, bao gồm những cách an toàn nhất để thực hiện và các rủi ro tiềm ẩn cần lưu ý.
Xóa Nhánh Git Sẽ Làm Gì?
Nhánh Git vốn dĩ là tạm thời. Chúng cho bạn một không gian để phát triển tính năng mới, sửa lỗi hoặc thử nghiệm mà không ảnh hưởng đến mã nguồn chính. Nhưng khi một nhánh đã hoàn thành nhiệm vụ, giữ nó lại chỉ làm tăng sự lộn xộn không cần thiết. Xóa nhánh theo tôi là việc “dọn dẹp” tốt để giữ quy trình Git gọn gàng và dễ quản lý.
Tôi muốn nhấn mạnh rằng “xóa” một nhánh không đồng nghĩa với “xóa sạch” công việc của bạn. Khi bạn xóa nhánh trong Git, bạn không xóa các commit, mà chỉ xóa tham chiếu đến chúng. Cách hoạt động như sau:
- Xóa nhánh cục bộ sẽ loại bỏ nhánh khỏi kho lưu trữ cá nhân của bạn. Nếu không còn nhánh hay thẻ nào tham chiếu đến các commit đó, chúng có thể sẽ bị Git dọn dẹp bằng cơ chế gom rác.
- Xóa nhánh từ xa loại bỏ nhánh khỏi kho lưu trữ dùng chungsitory (ví dụ, GitHub, GitLab, Bitbucket), khiến cộng tác viên không thể truy cập được. Tuy nhiên, mọi bản sao cục bộ của nhánh đó trên các máy khác vẫn còn cho đến khi được xóa thủ công hoặc cập nhật.
Vì sao nên xóa nhánh?
Xóa nhánh đơn giản là việc dọn dẹp tốt. Cũng như thói quen xóa ảnh trùng lặp, tệp tải xuống cũ và thư mục lỗi thời, có vài lý do chính đáng để xóa nhánh khi bạn đã xong việc với nó:
- Giúp kho lưu trữ sạch sẽ. Quá nhiều nhánh, đặc biệt là nhánh lỗi thời, sẽ khiến việc theo dõi công việc đang diễn ra khó hơn.
- Tránh nhầm lẫn. Nếu một nhánh không còn liên quan, giữ nó lại có thể gây bối rối về việc liệu nó còn đang được sử dụng hay không.
- Cải thiện cộng tác. Trong môi trường làm việc nhóm, xóa các nhánh tính năng đã hoàn tất cho thấy công việc đã xong và ngăn việc làm không cần thiết trên mã cũ.
- Giảm phình to ở kho từ xa. Kho từ xa có thể bị lộn xộn với các nhánh cũ, khiến bạn (hoặc người xem) khó điều hướng lịch sử dự án.
Nếu bạn mới dùng Git hoặc cần thiết lập trước khi quản lý nhánhes, hãy xem hướng dẫn cài đặt Git với các bước chi tiết.
Xóa Nhánh Git Cục Bộ
Xóa nhánh cục bộ không khó; may mắn là đây là một trong những tác vụ Git khá đơn giản. Hãy xem cách an toàn nhất để làm và những điều cần lưu ý.
Lệnh cơ bản để xóa nhánh cục bộ
Cách an toàn nhất để xóa nhánh cục bộ là dùng cờ -d:
git branch -d <branch_name>
Lưu ý lệnh này chỉ hoạt động nếu nhánh đã được gộp hoàn toàn vào nhánh hiện tại (thường là main hoặc master). Nếu có thay đổi chưa gộp, Git sẽ dừng bạn lại để tránh mất dữ liệu ngoài ý muốn.
Buộc xóa nhánh cục bộ
Nếu bạn cố xóa nhánh vẫn còn thay đổi chưa gộp, Git sẽ không cho trừ khi bạn buộc xóa:
git branch -D <branch_name>
Cờ -D (chữ hoa) bỏ qua kiểm tra an toàn và xóa nhánh ngay lập tức, dù đã gộp hay chưa. Tôi khuyên bạn nên hết sức cẩn trọng với thao tác này. Mọi công việc chưa gộp sẽ mất trừ khi bạn có bản sao lưu hoặc có nhánh khác trỏ đến cùng các commit.
Kiểm tra thay đổi chưa gộp trước khi xóa
Trước khi xóa nhánh, tốt nhất bạn nên kiểm tra xem nhánh đó có thay đổi chưa gộp không. Bạn có thể làm điều này với:
git branch --no-merged
Lệnh trên liệt kê tất cả các nhánh chưa được gộp vào nhánh hiện tại. Nếu nhánh bạn định xóa xuất hiện trong danh sách này, hãy kiểm tra lại rằng bạn không cần bất kỳ thay đổi nào của nó trước khi tiếp tục.
Muốn có tài liệu tham khảo nhanh cho các lệnh Git, bao gồm xóa nhánh? Tải vềe handy Git Cheat Sheet.
Xóa Nhánh Git Từ Xa
Xóa nhánh từ xa có phần khác so với xóa nhánh cục bộ. Vì nhánh từ xa tồn tại trong các kho dùng chung, việc loại bỏ chúng giúp mọi thứ ngăn nắp và ngăn các nhánh lỗi thời làm rối quy trình làm việc của nhóm.
Lệnh cơ bản để xóa nhánh từ xa
Để xóa nhánh khỏi kho từ xa như GitHub, GitLab hoặc Bitbucket, dùng:
git push origin --delete <branch_name>
Lệnh này xóa tham chiếu nhánh khỏi kho từ xa, khiến người khác không thể truy cập. Tuy nhiên, mọi bản sao cục bộ của nhánh trên các máy khác sẽ không bị ảnh hưởng — chúng cần được dọn dẹp riêng.
Xác minh việc xóa nhánh từ xa
Sau khi xóa nhánh từ xa, bạn cần xác nhận là nó thực sự đã biến mất. Trước tiên, lấy bản cập nhật mới nhất từ kho từ xa:
git fetch --prune
Lệnh này xóa các tham chiếu theo dõi từ xa đã lỗi thời. Để kiểm tra kỹ rằng nhánh không còn được liệt kê, chạy lệnh sau:
git branch -r
Lệnh trên hiển thị tất cả các nhánh từ xa còn lại. Nếu nhánh đã xóa vẫn xuất hiện, hãy thử chạy lại git fetch --prune hoặc đảm bảo bạn đã thực thi lệnh xóa trên đúng remote.
Thực Hành Tốt Khi Xóa Nhánh Git
Xóa nhánh là một phần thường lệ khi làm việc với Git, nhưng làm đúng cách sẽ giúp bạn tránh các rắc rối không cần thiết. Dưới đây là một số thực hành tốt để giữ kho lưu trữ gọn gàng và tránh sai sót tiềm ẩn.
Tránh xóa sớm các nhánh chưa gộp
Trước khi xóa nhánh, hãy chắc chắn rằng nó không chứa công việc chưa gộp vẫn còn cần thiết. Nếu bạn chưa chắc, hãy kiểm tra trạng thái bằng:
git branch --no-merged
Nếu nhánh có thay đổi giá trị mà chưa được gộp, hãy cân nhắc gộp hoặc lưu trữ trước thay vì xóa ngay.
Xóa sau khi đã gộp
Khi một tính năng hay bản sửa lỗi đã được gộp vào nhánh chính (main hoặc master), không còn lý do gì để giữ nhánh cũ. Xóa các nhánh đã gộp giúp tránh lộn xộn và giúp bạn dễ thấy hơn nhánh nào vẫn đang hoạt động.
Trao đổi với nhóm của bạn
Như một phép lịch sự nghề nghiệp, khi làm việc dự án cộng tác, tránh xóa nhánh mà không báo trước cho nhóm. Điều đó có thể gây nhầm lẫn — hoặc tệ hơn, làm gián đoạn công việc của người khác. Trước khi xóa nhánh từ xa, hãy kiểm tra với nhóm để đảm bảo không ai còn sử dụng nó. Tôi thường gửi một tin nhắn Slack đơn giản hay một ghi chú để tránh bực bội.
Trước khi xóa nhánh, bạn có thể muốn dọn dẹp lịch sử commit bằng cách squash commit. Tìm hiểu cách thực hiện trong hướng dẫn Git Squash Commits của chúng tôi.
Các Vấn Đề Thường Gặp Khi Xóa Nhánh Git
Xóa nhánh trong Git thường diễn ra suôn sẻ, nhưng có vài cạm bẫy phổ biến có thể làm khó bạn. Dưới đây là những điều cần chú ý và cách xử lý khi chúng xảy ra.
Xóa nhánh chưa được gộp hoàn toàn
Nhắc lại, nếu bạn cố xóa một nhánh còn thay đổi chưa gộp bằng git branch -d, Git sẽ ngăn lại để tránh mất dữ liệu. Đây là cơ chế an toàn. Mọi công việc chưa gộp sẽ mất nếu bạn buộc xóa với -D.
Nếu bạn đã lỡ xóa một nhánh và nhận ra cần khôi phục, bạn có thể phục hồi bằng reflog của Git:
git reflog
git checkout -b <branch_name> <commit_hash>
Điều này cho phép bạn khôi phục nhánh từ commit cuối cùng đã biết nếu nó chưa bị gom rác xóa hoàn toàn.
Xóa nhánh hiện tại
Git sẽ không cho bạn xóa nhánh mà bạn đang đứng trên đó, điều này hợp lý — nếu không bạn sẽ không còn nhánh hoạt động. Nếu gặp lỗi khi cố xóa nhánh, hãy chuyển sang nhánh khác trước:
git checkout main
Hoặc, nếu dùng Git 2.23+:
git switch main
Khi bạn đã ở nhánh khác, có thể xóa an toàn nhánh bạn muốn loại bỏ.
Cần chuyển đổi giữa các nhánh trước khi xóa một nhánh? Hướng dẫn của chúng tôi về checkout nhánh từ xa trong Git sẽ hướng dẫn bạn quy trình.
Lỡ xóa nhánh từ xa
Nếu một nhánh từ xa bị xóa nhầm, bạn có thể khôi phục nó (giả sử bạn vẫn có bản cục bộ) bằng cách đẩy nó trở lại remote:
git push origin <deleted_branch_name>
Lệnh này tạo lại nhánh trên kho từ xa, khôi phục quyền truy cập cho cộng tác viên. Nếu không có bản cục bộ, bạn có thể cần kiểm tra lịch sử commit và tạo lại nhánh thủ công.
Vì Sao Tôi Không Thể Xóa Một Nhánh Git?
Nếu bạn gặp khó khăn khi xóa nhánh trong Git, hãy xem lại các vấn đề thường gặp; kiểm tra xem nhánh đã được gộp hoàn toàn chưa, bạn có đang ở chính nhánh đó không, hay đó là nhánh từ xa. Nếu không phải các nguyên nhân này, có thể là do thiết lập hoặc quyền của bạn.
- Điều đầu tiên cần kiểm tra là bạn có đang ở nhánh đó không. Git sẽ không cho xóa nhánh bạn đang làm việc, vì vậy bạn cần chuyển sang nhánh khác trước.
- Nếu không phải vậy, có thể nhánh vẫn còn thay đổi chưa gộp. Git bảo vệ các nhánh có công việc chưa gộp, nên trừ khi bạn chắc chắn không cần các thay đổi đó, bạn sẽ cần gộp hoặc buộc xóa nhánh bằng
git branch -D branch-name. - Nếu bạn đang cố xóa nhánh từ xa,
git branch -dđơn thuần sẽ không hiệu quả. Thay vào đó, bạn cần chạygit push origin --delete branch-name, và để dọn các tham chiếu cũ, bạn có thể dùnggit fetch --prune. - Một số kho, đặc biệt là trên các nền tảng như GitHub hoặc GitLab, có các nhánh được bảo vệ không thể xóa nếu không thay đổi thiết lập. Nếu bạn làm việc trong kho dùng chung, bạn cũng có thể cần quyền phù hợp để xóa nhánh.
Vẫn chưa xong? Chạy git branch -v có thể cho bạn thêm chi tiết về trạng thái nhánh và giúp bạn hiểu chuyện gì đang xảy ra trước khi thử lại.
Tự Động Hóa Việc Dọn Dẹp Nhánh Với Git
Tôi rất thích tự động hóa hợp lý. Dù xóa nhánh thủ công là ổn, và bạn nên hiểu cách làm, vẫn có cách khác. Nếu bạn phải xử lý nhiều nhánh (như trong môi trường nhóm), tự động hóa có thể tiết kiệm thời gian và giữ mọi thứ gọn gàng. Git cung cấp vài cách để tinh gọn việc dọn dẹp nhánh, giảm lộn xộn mà không cần thêm công sức.
Tự động dọn dẹp nhánh từ xa
Khi một nhánh từ xa bị xóa, Git cục bộ của bạn vẫn giữ tham chiếu đến nó cho đến khi bạn cập nhật thủ công. Thay vì dọn từng cái một, bạn có thể dùng:
git fetch --prune
Lệnh trên tự động loại bỏ các tham chiếu cục bộ đến những nhánh không còn tồn tại trên kho từ xa, giúp mọi thứ luôn đồng bộ. Chạy lệnh này thường xuyên sẽ ngăn các nhánh lỗi thời chồng chất trong repo cục bộ của bạn.
Dùng Git hooks để dọn dẹp
Đối với nhóm hoặc dự án lớn, Git hooks có thể giúp tự động dọn dẹp nhánh. Hooks là các script tùy chỉnh chạy tại những thời điểm nhất định trong quy trình Git, như sau khi gộp nhánh. Bạn có thể cấu hình post-merge hook để tự động xóa các nhánh đã gộp sau một khoảng thời gian nhất định, đảm bảo nhánh cũ không tồn tại dai dẳng không cần thiết.
Kết Luận
Theo thời gian, các nhánh có thể trở nên bừa bộn, nhưng một chút “tỉa tót” sẽ giúp kho lưu trữ sạch và quy trình làm việc hiệu quả. Bằng cách hình thành thói quen xóa các nhánh đã gộp, kiểm tra kỹ các nhánh chưa gộp và duy trì trao đổi trong dự án nhóm, bạn có thể tránh được các vấn đề này. Và nếu muốn tiến thêm một bước, các công cụ tự động như git fetch --prune và Git hooks có thể giúp giữ repo của bạn sạch sẽ mà không tốn thêm công sức.
Xóa nhánh chỉ là một bước trên con đường làm chủ Git. Để đào sâu kiến thức về quản lý phiên bản, hãy xem khóa Intermediate Git. Nếu bạn làm việc với các kho GitHub, nắm vững các khái niệm cốt lõi của GitHub là điều thiết yếu. Tìm hiểu thêm trong khóa Introduction to GitHub Concepts!
Câu hỏi thường gặp
Việc xóa nhánh trong Git có ảnh hưởng đến mã chạy sản xuất của tôi không?
Không, xóa nhánh sẽ không ảnh hưởng đến mã chạy sản xuất miễn là nhánh đó đã được gộp vào nhánh chính (main hoặc master). Tuy nhiên, nếu bạn xóa một nhánh có thay đổi chưa gộp, mọi công việc chưa được đưa vào nhánh khác sẽ bị mất. Luôn kiểm tra trạng thái gộp trước khi xóa.
Làm sao để ngăn nhóm của tôi vô tình xóa những nhánh quan trọng?
Nếu bạn làm việc trong kho dùng chung (GitHub, GitLab, v.v.), bạn có thể bảo vệ các nhánh quan trọng như main và develop bằng cách thiết lập quy tắc bảo vệ nhánh. Điều này giúp ngăn xóa nhầm và chặn force push trái phép. Với kho cục bộ, hãy cân nhắc dùng quy ước đặt tên (ví dụ, thêm tiền tố wip- cho nhánh đang làm dở) để chỉ ra nhánh nào chưa nên xóa.
Có cách nào theo dõi ai đã xóa một nhánh Git từ xa không?
Có, trong các kho lưu trữ trên GitHub, GitLab hoặc Bitbucket, việc xóa nhánh thường được ghi lại trong nguồn hoạt động. Bạn có thể kiểm tra nhật ký kiểm toán hoặc lịch sử commit của kho để xem ai xóa nhánh và khi nào. Với các kho Git tự lưu trữ, bạn có thể cần thiết lập server-side hooks để theo dõi thao tác xóa thủ công.
Làm sao khôi phục một nhánh Git đã xóa nếu tôi đã đóng terminal?
Nếu bạn đã xóa nhánh và chưa đóng terminal, bạn có thể hoàn tác bằng:
git checkout -b <branch_name> <commit_hash>
Nhưng nếu bạn đã đóng terminal, lựa chọn tốt nhất là dùng git reflog.
Lệnh này sẽ hiển thị lịch sử các hành động gần đây, bao gồm việc xóa nhánh. Tìm hash của commit cuối cùng từ nhánh đã xóa và dùng nó để tạo lại nhánh. Tuy nhiên, nếu nhánh bị xóa cả từ xa lẫn cục bộ, và không ai còn bản sao, có thể sẽ không thể khôi phục.
Sự khác biệt giữa `git branch -d` và `git branch -D` trong thực tế là gì?
git branch -d <branch>— Xóa an toàn. Sẽ ngăn xóa nếu nhánh còn thay đổi chưa gộp, đóng vai trò lưới an toàn.git branch -D <branch>— Buộc xóa. Không quan tâm nhánh có thay đổi chưa gộp — sẽ xóa ngay lập tức.
Trong thực tế, bạn sẽ dùng -d hầu hết thời gian để tránh mất việc ngoài ý muốn. Chỉ dùng -D khi bạn chắc chắn 100% rằng nội dung của nhánh không còn cần thiết.

Ashlyn Brooks là Nhà biên tập kỹ thuật, chuyên về các nền tảng đám mây (Azure, AWS), tài liệu API và hạ tầng dữ liệu. Với hơn bảy năm kinh nghiệm, cô xuất sắc trong việc chuyển tải các khái niệm phức tạp thành nội dung rõ ràng, thân thiện với người dùng, giúp nâng cao trải nghiệm của nhà phát triển và thúc đẩy việc tiếp nhận sản phẩm.