Câu trả lời:
git reset --hard HEAD~1
git push -f <remote> <branch>
(Ví dụ đẩy git push -f origin bugfix/bug123
:)
Điều này sẽ hoàn tác cam kết cuối cùng và đẩy lịch sử cập nhật lên điều khiển từ xa. Bạn cần vượt qua -f
vì bạn đang thay thế lịch sử ngược dòng trong điều khiển từ xa.
git log --decorate --oneline
để tìm ra nơi CHÍNH của bạn chỉ đến.
git reset HEAD~1
nếu bạn không muốn những thay đổi của mình biến mất (những thay đổi chưa được thực hiện). Thay đổi, cam kết và đẩy lạigit push -f [origin] [branch]
Nói chung, thực hiện một cam kết "nghịch đảo", sử dụng:
git revert 364705c
sau đó gửi nó đến điều khiển từ xa như bình thường:
git push
Điều này sẽ không xóa cam kết: nó thực hiện một cam kết bổ sung hoàn tác bất kỳ cam kết đầu tiên đã làm. Bất cứ điều gì khác, không thực sự an toàn, đặc biệt là khi những thay đổi đã được tuyên truyền.
git reset
chỉ được chấp nhận nếu bạn vẫn chưa đẩy các thay đổi đến máy chủ.
Trước hết, hãy thư giãn.
"Không có gì nằm dưới sự kiểm soát của chúng tôi. Sự kiểm soát của chúng tôi chỉ là ảo ảnh.", "Sai lầm là con người"
Tôi hiểu rằng bạn đã vô tình đẩy mã của bạn đến remote-master
. Điều này sẽ ổn thôi.
1. Lúc đầu, hãy lấy SHA-1
giá trị của cam kết mà bạn đang cố gắng trả lại, ví dụ như cam kết với nhánh chính. chạy cái này:
git log
bạn sẽ thấy bó 'f650a9e398ad9ca606b25513bd4af9fe ...' giống như các chuỗi cùng với mỗi cam kết. sao chép số đó từ cam kết mà bạn muốn quay lại .
2. Bây giờ, gõ lệnh dưới đây:
git reset --hard your_that_copied_string_but_without_quote_mark
bạn sẽ thấy thông báo như "ĐẦU bây giờ". bạn rõ ràng Những gì nó vừa làm là phản ánh sự thay đổi đó cục bộ.
3. Bây giờ, gõ lệnh dưới đây:
git push -f
bạn nên xem như
"warning: push.default không được đặt, giá trị ngầm định của nó đã thay đổi trong ..... ... Tổng 0 (delta 0), tái sử dụng 0 (delta 0) ... ... your_branch_name -> master (bắt buộc cập nhật) . "
Bây giờ, bạn đã rõ ràng. Kiểm tra lại bản gốc với "git log" một lần nữa, fixed_destination_commit của bạn sẽ nằm trên đầu danh sách.
Bạn được chào đón (trước;))
CẬP NHẬT:
Bây giờ, những thay đổi bạn đã thực hiện trước khi tất cả những điều này bắt đầu, giờ đã biến mất. Nếu bạn muốn mang những công việc khó khăn đó trở lại, điều đó là có thể. Nhờ git reflog , và git cherry-pick .
Vì vậy, tôi sẽ đề nghị vui lòng theo dõi blog này hoặc bài đăng này .
Bạn có thể thực hiện một rebase tương tác:
git rebase -i <commit>
Điều này sẽ đưa lên trình soạn thảo mặc định của bạn. Chỉ cần xóa dòng chứa cam kết bạn muốn xóa để xóa cam kết đó.
Tất nhiên, bạn cũng sẽ cần truy cập vào kho lưu trữ từ xa để áp dụng thay đổi này ở đó.
Xem câu hỏi này: Git: xóa các xác nhận đã chọn khỏi kho lưu trữ
Hãy thử sử dụng
git reset --hard <commit id>
Xin lưu ý: Ở đây id id sẽ là id của cam kết bạn muốn đến nhưng không phải id bạn muốn đặt lại. đây là điểm duy nhất mà tôi cũng bị mắc kẹt.
sau đó đẩy
git push -f <remote> <branch>
git reset --hard <the-sha-you-want-to-return-to>
.