Batalkan rebase sepenuhnya

255

Saya melakukan rebase seperti ini:

git rebase --onto master new_background_processing export_background_processing

Itu tidak melakukan apa yang saya inginkan, jadi saya melakukan reset:

git reset --hard HEAD@{1}

Saya mendapatkan cabang saya kembali ke keadaan semula, tetapi saya menerima pesan ini ketika saya mengetik status git:

# You are currently rebasing branch 'export_background_processing' on 'e378641'.

Bagaimana cara saya membatalkan rebase itu sepenuhnya? Tidak yakin apa artinya itu sendiri.

Graham Jackson
sumber
16
git rebase --abort
Micha Wiedenmann
6
Git 2.12 sekarang menyediakan git rebase --quit. Lihat jawaban saya di bawah ini
VonC

Jawaban:

408

Gunakan git rebase --abort. Dari dokumentasi kernel Linux resmi untukgit rebase :

git rebase --continue | --skip | --abort | --edit-todo

sumber
5
Dalam kasus saya git rebase --abortitu tidak berhasil, karena saya mengacaukan sesuatu. Saya hanya punya kesalahan berikut: error: could not read '.git/rebase-apply/head-name': directory of file does not exist. The git rebase --quit bawah dijelaskan memecahkan masalah saya.
Kout
84

Dalam kasus rebase masa lalu yang tidak Anda batalkan dengan benar, Anda sekarang (Git 2.12, Q1 2017) memiliki git rebase --quit

Lihat komit 9512177 (12 Nov 2016) oleh Nguyễn Thái Ngọc Duy ( pclouds) . (Digabung oleh Junio ​​C Hamano - gitster- dalam komit 06cd5a1 , 19 Des 2016)

rebase: tambahkan --quitke pembersihan rebase, biarkan semuanya tidak tersentuh

Ada saat-saat ketika Anda memutuskan untuk membatalkan rebase yang sedang berlangsung dan melanjutkan untuk melakukan sesuatu yang lain tetapi Anda lupa untuk melakukan " git rebase --abort" pertama . Atau rebase telah berlangsung begitu lama sehingga Anda lupa. Pada saat Anda menyadari bahwa (misalnya dengan memulai rebase lain) sudah terlambat untuk menelusuri kembali langkah Anda. Solusinya biasanya

rm -r .git/<some rebase dir>

dan lanjutkan dengan hidup Anda.
Tetapi mungkin ada dua direktori berbeda untuk <some rebase dir>(dan itu jelas membutuhkan pengetahuan tentang bagaimana rebase bekerja), dan bagian " .git" bisa lebih lama jika Anda tidak berada di top-dir, atau di worktree yang terhubung. Dan " rm -r" sangat berbahaya untuk dilakukan .git, kesalahan di sana dapat menghancurkan basis data objek atau data penting lainnya.

Berikan " git rebase --quit" untuk kasus penggunaan ini, meniru contoh " git cherry-pick --quit".


Sebelum Git 2.27 (Q2 2020), entri simpanan yang dibuat oleh " git merge --autostash" untuk menjaga keadaan kotor awal dibuang karena kesalahan " git rebase --quit", yang telah diperbaiki.

Lihat komit 9b2df3e (28 Apr 2020) oleh Denton Liu ( Denton-L) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit 3afdeef , 29 Apr 2020)

rebase: simpan entri autostash ke stash reflogdalam--quit

Ditandatangani oleh: Denton Liu

Dalam a03b55530a (" merge: teach --autostash option", 2020-04-07, Git v2.27.0 - gabung yang terdaftar di batch # 5 ), --autostashopsi ini diperkenalkan untuk git merge.

(Lihat " Bisakah" git pull"secara otomatis menyimpan dan memunculkan perubahan yang tertunda? ")

Khususnya, ketika git merge --quitdijalankan dengan hadiah entri autostash, itu disimpan ke dalam simpanan simpanan.

Ini kontras dengan perilaku saat ini di git rebase --quitmana entri autostash hanya hilang begitu saja.

Terapkan perilaku git merge --quitmasuk git rebase --quitdan simpan entri autostash ke simpanan simpanan alih-alih dihapus saja.

VONC
sumber
3
Ini sangat berguna untuk menghindari efek samping dari mereset direktori kerja ketika perubahan dilakukan di atas git rebase, bukannya kehilangan mereka seperti yang baru saja saya lakukan: P.
Simpanse Warlike
12

Anda beruntung tidak menyelesaikan rebase, jadi Anda masih bisa melakukannya git rebase --abort. Jika Anda telah menyelesaikan rebase ( menulis ulang sejarah ), segalanya akan jauh lebih kompleks. Pertimbangkan untuk menandai ujung cabang sebelum melakukan operasi yang berpotensi merusak (terutama penulisan ulang riwayat), dengan cara itu Anda dapat memundurkan jika sesuatu meledak.

vonbrand
sumber
8

Jika Anda "Rebasing" , "Sudah mulai rebase" yang ingin Anda batalkan , komentar saja (#)semua komit yang tercantum dalam editor rebase.

Sebagai hasilnya, Anda akan mendapatkan pesan baris perintah

Nothing to do
Almas Adilbek
sumber