Lupa "git rebase --continue" dan lakukan "git commit". Bagaimana cara memperbaiki?

112

Saya melakukan rebasing kode di git, saya mendapat beberapa konflik penggabungan. Saya menyelesaikan konflik dan melakukan:

git add

Pada titik ini saya lupa melakukan:

git rebase --continue

Saya melanjutkan pengkodean dan melakukan:

git commit

untuk perubahannya. Sekarang saya aktif "no branch"dan tidak dapat melakukan:

git rebase --continue 

Bagaimana cara mengatasinya?

Abhilash
sumber
# Saat ini tidak ada di cabang mana pun. tidak ada yang perlu dilakukan (direktori kerja bersih)
Abhilash

Jawaban:

4

EDIT : Lihat jawaban di bawah ini juga untuk melihat apakah itu solusi yang lebih mudah untuk Anda. https://stackoverflow.com/a/12163247/493106


Saya harus mencobanya, tetapi saya pikir inilah yang akan saya lakukan:

  1. Beri tag komit terbaru Anda (atau cukup tulis SHA1-nya di suatu tempat sehingga Anda tidak kehilangannya): git tag temp
  2. git rebase --abort
  3. Lakukan rebase lagi. Anda harus menyelesaikan penggabungan lagi. :(
  4. git rebase --continue
  5. git cherry-pick temp

Masalahnya adalah tempkomit Anda mungkin berisi resolusi penggabungan, dan kode baru. Jadi ini bisa jadi rumit tetapi saya akan mencobanya dan melihat apakah berhasil.

MatrixFrog
sumber
Anda dapat menandai seperti yang dikatakan @MatrixFrog atau Anda dapat menyimpannya sebagai tambalan juga. Kemudian lakukan rebase abort. Periksa status untuk memastikan repo dalam keadaan yang Anda tahu tidak ada masalah dan kemudian mulai ambil dan rebase.
yasouser
18
Jangan lakukan ini. Lihat jawaban kirikaza di bawah ini untuk cara yang lebih sederhana / bersih. Jangan main-main dengan pilihan ceri dan menyelesaikan konflik untuk kedua kalinya.
tandrewnichols
4
@Abhilash Terimalah jawaban kirikaza. Saya (seperti yang dilakukan tandrewnichols) melakukan ini dan ada cara yang jauh lebih mudah (dan internet tampaknya setuju karena jawaban itu memiliki 4x suara positif).
David Doria
Sekarang 10x upvote ... juga, gunakan git rerere untuk mengingat resolusi konflik Anda (berguna, kecuali Anda terkadang membuat resolusi buruk yang tidak Anda inginkan untuk diingat).
Ajax
217

Lakukan saja git reset --soft HEAD^. Ini memindahkan penunjuk HEAD ke induknya tetapi mempertahankan pohon kerja dan menambahkan perubahan gabungan ke indeks. Jadi Anda bisa melanjutkan rebasing dengan git rebase --continueseperti sebelumnya.

Kirikaza
sumber
1
Ini benar-benar berfungsi, dan juga pertama kalinya saya menemukan kegunaan untuk --soft. Senang mengetahui cara kerjanya, terima kasih!
mmocny
1
Saya harap orang-orang akan melihat semua suara positif untuk jawaban ini dan mengikuti apa yang disarankan di sini!
Raghu
1
Ini persis seperti yang saya pikirkan (tetapi mungkin berlalu begitu saja secara tidak sengaja). Tidak yakin apakah HEAD diperbarui selama rebase. Terima kasih telah mengonfirmasi! Senang sekali saya menggulir lebih jauh sebelum mengotak-atik sakit kepala di atas.
DeezCashews
Saya mengedit jawaban yang diterima untuk meletakkan tautan di sini- Saya tidak melihat jawaban ini sampai setelah saya mengikuti petunjuk di atas.
xaxxon
0

Saya mendapat masalah yang sama, dan lebih buruk lagi, saya melakukan rebasing tiga komit, dan setelah menyelesaikan konflik pada komit kedua, saya "berkomitmen" alih-alih "rebase - lanjutkan".

Alhasil saya mengalami git reflog ini

Ketika saya menerapkan solusi kirikaza, saya baru saja mengembalikan komit ketiga, dan bukan yang kedua, yang bermasalah ..

Seperti yang Anda lihat, rebase dimulai dengan checkout dari remote / origin / master branch dan kemudian menerapkan tiga komit saya yang muncul sebagai tiga operasi sebelumnya (sebelum checkout) di reflog.

Kemudian, jika Anda ingin memulai ulang dari basis yang bersih, sebelum melakukan rebase, Anda cukup mereset hard ke hash sebelum checkout operasi rebase. Dalam kasus saya (lihat gambar):

git reset --hard 859ed3c

Kemudian Anda bisa memulai yang baru git rebase.

Louis Durand
sumber
0

Saya telah melakukan git rebased, memperbaiki konflik, git menambahkan file dengan konflik, dan (secara keliru) dilakukan.

Saya mencoba solusi git reset --soft HEAD^dan yang git reset --harddiberikan, tetapi tidak ada yang berhasil untuk saya.

Namun, baru saja git rebase --abortberhasil: itu membawa saya kembali ke sebelum memulai rebase dengan pohon kerja yang bersih.

sisa
sumber