Bạn có chắc chắn muốn xóa bài viết này không ?
Bạn có chắc chắn muốn xóa bình luận này không ?
KHÔNG BAO GIỜ force push master
Tôi lỡ push một vài commit xấu và tôi muốn xóa đi mà không ai biết :v
Giả sử bạn đã "lỡ" push 1 vài commit không hay lên master
$ git log --oneline
hash1234 bad commit1
hash5678 bad commit2
hash9101 normal commit
Để sửa tình trạng này thì có một số bạn hay xóa commit ở local đi rồi update lên upstream bằng cách xóa upstream branch đi push lại hoặc force push cả upstream.
Mình muốn khuyên các bạn không bao giờ nên làm thế. Hậu quả đầu tiên là: tất cả các Pull Request sẽ bị close.
Vậy nên làm thế nào ?
Bỏ ý định xóa commit mà không muốn người khác biết đi, hãy sửa sai bằng một commit mới. Cách làm là revert rồi rebase
$ git revert hash1234
$ git revert hash5678
$ git rebase -i HEAD~2
Khi này cơ chế rebase -i
của git sẽ mở 1 cái editor và hỏi bạn muốn setup quá trình rebase thế nào. Bạn giữ lại commit đầu tiên bằng pick
hoặc p
, bỏ commit thứ 2 bằng squash
hoặc s
.
pick hash1234 Revert "bad commit1"
squash hash5678 Revert "bad commit2"
# Rebase hash1234..hash5678 onto hash1234
Sau khi save trong editor xong thì git sẽ tổng hợp 2 revert commit thành 1 commit duy nhất và là một commit mới. Bây giờ bạn chỉ cần push commit mới này lên upstream.
$ git push origin master
Dùng tính năng của Github để cấm force push
Tin vui cho team leader là gần đây Github đã ra tính năng mới cho phép cấm force push tại một branch. Team leader chỉ cần vào phần setting, chọn protected branches là master, thì master sẽ không thể bị xóa hoặc force push được nữa!






