Di Git, bagaimana Anda mengembalikan rebase jika Anda tidak menyukainya?
Git tidak memiliki dry-run untuk rebase. Jika saya melakukan rebase dan belum melakukan push, bagaimana cara melakukan rollback ke sebelumnya, seolah-olah tidak pernah terjadi?
Di Git, bagaimana Anda mengembalikan rebase jika Anda tidak menyukainya?
Git tidak memiliki dry-run untuk rebase. Jika saya melakukan rebase dan belum melakukan push, bagaimana cara melakukan rollback ke sebelumnya, seolah-olah tidak pernah terjadi?
Jawaban:
Anda dapat menggunakan reflog untuk menemukan tindakan pertama sebelum rebase dimulai dan kemudian mengatur ulang --hard kembali ke sana. misalnya
$ git reflog
b710729 HEAD@{0}: rebase: some commit
5ad7c1c HEAD@{1}: rebase: another commit
deafcbf HEAD@{2}: checkout: moving from master to my-branch
...
$ git reset HEAD@{2} --hard
Sekarang Anda harus kembali ke sebelum rebase dimulai.
Untuk menemukan tempat yang tepat untuk mengatur ulang, Anda cukup memilih entri yang paling dekat dengan atas yang tidak dimulai dengan "rebase".
Jika rebase adalah satu - satunya hal yang telah Anda lakukan di cabang, yaitu Anda tidak memiliki perubahan / perubahan yang tidak diinginkan - maka Anda bisa menghapus cabang lokal dengan git branch -Ddan kemudian memeriksanya lagi:
$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch
Atau untuk efek yang sama, Anda dapat mengatur ulang --hard ke cabang asal:
$ git reset --hard origin/my-branch
Jika Anda melakukan ini saat Anda memiliki komit tidak terdorong lainnya, maka Anda akan kehilangannya. Dalam kasus tersebut, cukup gunakan pendekatan reflog di atas untuk melompat kembali ke entri reflog tempat Anda membuat komit.
ORIG_HEADke nilai hash asli dari cabang yang di-rebase. Jadi daripada mencari angka 2 HEAD@{2}, Anda bisa menggunakan ORIG_HEAD... tapi hanya jika ORIG_HEADmasih tidak terganggu. Sekelompok perintah Git mengaturnya (rebase, am, reset, dan merge, dalam berbagai keadaan).
Rebase menyimpan cadangan status lama sebagai ORIG_HEAD.
Jadi, Anda dapat mengembalikan rebase terakhir dengan menjalankan:
git reset --hard ORIG_HEAD