Điều này phụ thuộc rất nhiều vào ý nghĩa của bạn khi "hoàn nguyên".
Tạm thời chuyển sang một cam kết khác
Nếu bạn muốn tạm thời quay lại với nó, đánh lừa xung quanh, sau đó quay lại nơi bạn đang ở, tất cả những gì bạn phải làm là kiểm tra cam kết mong muốn:
# This will detach your HEAD, that is, leave you with no branch checked out:
git checkout 0d1d7fc32
Hoặc nếu bạn muốn thực hiện các cam kết trong khi bạn ở đó, hãy tiếp tục và tạo một chi nhánh mới trong khi bạn ở đó:
git checkout -b old-state 0d1d7fc32
Để quay trở lại nơi bạn đang ở, chỉ cần kiểm tra chi nhánh bạn đã ở lại. (Nếu bạn đã thực hiện thay đổi, như mọi khi khi chuyển đổi chi nhánh, bạn sẽ phải xử lý chúng khi thích hợp. Bạn có thể đặt lại để vứt chúng đi; họ đến một chi nhánh ở đó nếu bạn muốn một chi nhánh ở đó.)
Xóa cứng các cam kết chưa được công bố
Mặt khác, nếu bạn muốn thực sự loại bỏ mọi thứ bạn đã làm kể từ đó, có hai khả năng. Một, nếu bạn chưa công bố bất kỳ cam kết nào trong số này, chỉ cần đặt lại:
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
Nếu bạn làm phiền, bạn đã vứt bỏ các thay đổi cục bộ của mình, nhưng ít nhất bạn có thể quay lại nơi bạn đã ở trước đó bằng cách đặt lại lần nữa.
Hoàn tác các cam kết được công bố với các cam kết mới
Mặt khác, nếu bạn đã xuất bản tác phẩm, có lẽ bạn không muốn đặt lại chi nhánh, vì đó là cách viết lại lịch sử một cách hiệu quả. Trong trường hợp đó, bạn thực sự có thể hoàn nguyên các cam kết. Với Git, Revert có một ý nghĩa rất cụ thể: tạo một cam kết với bản vá ngược để hủy bỏ nó. Bằng cách này, bạn không viết lại bất kỳ lịch sử.
# This will create three separate revert commits:
git revert a867b4af 25eee4ca 0766c053
# It also takes ranges. This will revert the last two commits:
git revert HEAD~2..HEAD
#Similarly, you can revert a range of commits using commit hashes:
git revert a867b4af..0766c053
# Reverting a merge commit
git revert -m 1 <merge_commit_sha>
# To get just one, you could use `rebase -i` to squash them afterwards
# Or, you could do it manually (be sure to do this at top level of the repo)
# get your index and work tree into the desired state, without changing HEAD:
git checkout 0d1d7fc32 .
# Then commit. Be sure and write a good message describing what you just did
git commit
Các git-revert
trang web thực sự bao gồm rất nhiều điều này trong mô tả của nó. Một liên kết hữu ích khác là phần git-scm.com này thảo luận về git-Revert .
Nếu bạn quyết định cuối cùng bạn không muốn hoàn nguyên, bạn có thể hoàn nguyên hoàn nguyên (như được mô tả ở đây) hoặc đặt lại về trước khi hoàn nguyên (xem phần trước).
Bạn cũng có thể thấy câu trả lời này hữu ích trong trường hợp này:
Làm thế nào để di chuyển CHÍNH trở lại vị trí trước đó? (Đầu tách ra)