2011-02-02 32 views
19

Làm cách nào để "rollback" cam kết cuối cùng trong git mà không xóa bất kỳ thay đổi nào?git tương đương với hg rollback

Đây là điều mà tôi đã thực hiện thường xuyên trong hg:

  • Commit "Cố định 107."
  • nhớ rằng tôi đã quên làm một cái gì đó
  • hg rollback
  • Do một cái gì đó
  • Commit "Cố định 107."

Trả lời

18

Với git, bạn có thể thực sự thích sử dụng tùy chọn --amend trong trường hợp đó.

  • Cam kết "Cố định 107."
  • nhớ rằng tôi đã quên làm điều gì đó
  • Do something
  • git commit --amend và chỉnh sửa các ghi chú

Nếu bạn cần rollback vì những lý do khác hãy nhìn vào git revert

+6

'hoàn nguyên' là cách để đối phó với chỉ một trong các lý do khác. Nếu cam kết trong câu hỏi được xuất bản, thì thực sự, hãy sử dụng 'git revert'. Nếu nó chưa được đẩy và đó là cam kết mới nhất, hãy sử dụng 'git reset [--hard] HEAD ^'. Nếu nó chưa được đẩy, và nó không phải là cam kết mới nhất, sử dụng 'git rebase -i' để loại bỏ nó khỏi lịch sử, để phần còn lại nguyên vẹn. – Cascabel

+3

Hãy coi chừng git noobs (như tôi).Tôi đã "git reset HEAD ^" và nó không chỉ loại bỏ cam kết của tôi khỏi lịch sử mà còn hoàn nguyên các tệp đã cam kết về trạng thái cam kết trước đó của chúng. –

+0

@DaviLima 'git reset HEAD ^' không nên làm điều đó, nó chỉ nên sửa đổi các tệp trong thư mục làm việc của bạn nếu bạn cũng sử dụng cờ '--hard'. – dubiousjim

3

Trong trường hợp cụ thể này, tôi sẽ git commit --amend. Nếu bạn chưa đẩy và bạn đã cam kết các thay đổi khác thì bạn cũng có thể sử dụng git rebase -i để chỉnh sửa bất kỳ cam kết nào bạn muốn.

1

Tôi đã cố gắng để thực hiện khôi phục hg trong kho lưu trữ git của tôi và tôi đã quản lý bằng cách sử dụng

git reset HEAD~ 

điều này để lại cho tôi những thay đổi của tôi trong thư mục làm việc nhưng bây giờ không được tổ chức. Source

15

Hãy thử điều này:

git reset --soft HEAD^ 

tôi thấy nó giống nhau của 'hg rollback', bởi vì:

  • cam kết cuối cùng hủy
  • thay đổi bảo quản
  • file cam kết trước đây được tổ chức

Bạn cũng có thể tạo ra một bí danh rollback git như thế này:

git config --global alias.rollback 'reset --soft HEAD^' 

Vì vậy, bây giờ bạn có thể chỉ cần gõ git rollback để có chính xác các lệnh tương tự mà bạn có trên Mercurial.

Các vấn đề liên quan