“Git rebase --continue” u unuttum ve “git commit” yaptım. Nasıl düzeltilir?


112

Git'te kodu yeniden yazıyordum, bazı birleştirme çakışmaları var. Anlaşmazlıkları çözdüm ve yaptım:

git add

Bu noktada şunu yapmayı unuttum:

git rebase --continue

Kodlamaya devam ettim ve yaptım:

git commit

değişiklikler için. Şimdi yayındayım "no branch"ve yapamıyorum:

git rebase --continue 

Bunu nasıl düzeltirim?


# Şu anda herhangi bir şubede değil. işlenecek bir şey yok (çalışma dizini temiz)
Abhilash

Yanıtlar:


4

DÜZENLEME : Bunun sizin için daha kolay bir çözüm olup olmadığını görmek için aşağıdaki yanıta da bakın. https://stackoverflow.com/a/12163247/493106


Denemek zorundayım ama sanırım yapacağım şey bu:

  1. En son işleminizi etiketleyin (veya sadece SHA1'i bir yere yazın, böylece kaybetmezsiniz): git tag temp
  2. git rebase --abort
  3. Rebase'i tekrar yapın. Birleştirmeyi tekrar çözmeniz gerekecek. :(
  4. git rebase --continue
  5. git cherry-pick temp

Bununla ilgili sorun, tempkaydetmenizin muhtemelen hem birleştirme çözümünü hem de yeni kodu içermesidir. Bu yüzden zor olabilir ama deneyip işe yarayıp yaramadığına bakardım.


Ya @ MatrixFrog'un dediği gibi etiketleyebilir ya da bir yama olarak kaydedebilirsiniz. Daha sonra yeniden taban işlemini iptal edin. Deponun herhangi bir sorun yaşamadığını bildiğiniz bir durumda olduğundan emin olmak için durumu kontrol edin ve ardından getirme ve yeniden temele başlayın.
yasouser

18
Bunu yapma. Çok daha basit / daha temiz bir yol için aşağıdaki kirikaza'nın cevabına bakınız. Kiraz toplama ve çatışmaları ikinci kez çözme ile uğraşmayın.
tandrewnichols

4
@Abhilash Lütfen kirikaza'nın cevabını kabul edin. Ben (tandrewnichols gibi) bunu yaptım ve çok daha kolay bir yol vardı (ve internet, bu cevabın 4 katı olumlu oylara sahip olduğu için aynı fikirde görünüyor).
David Doria

Artık 10 kat artı oy ... ayrıca, çatışma çözümlerinizi hatırlamak için git rerere kullanın (bazen hatırlamasını istemediğiniz kötü kararlar almadığınız sürece yararlıdır).
Ajax

217

Sadece yap git reset --soft HEAD^. HEAD işaretçisini üstüne taşır, ancak çalışma ağacını tutar ve birleştirme değişikliğini dizine ekler. Böylece, eskisi git rebase --continuegibi yeniden oluşturmaya devam edebilirsiniz .


1
Bu tamamen işe yaradı ve aynı zamanda --soft için bir kullanım bulduğum ilk zamandı. Nasıl çalıştığını bilmek güzel, teşekkürler!
mmocny

1
Umarım insanlar bu yanıttaki tüm olumlu oyları görür ve burada önerilenleri takip eder!
Raghu

1
Bu tam olarak düşündüğüm şeydi (ama kazayla zor geçmiş olabilir). HEAD'in bir yeniden ödeme sırasında güncellenip güncellenmediğinden emin değildim. Onayladığınız için teşekkürler! Yukarıdaki baş ağrısıyla uğraşmadan önce biraz daha kaydırdığıma sevindim.
DeezCashews

Kabul edilen cevabı buraya bir bağlantı koymak için düzenledim - yukarıdaki talimatları takip edene kadar bu cevabı görmedim.
xaxxon

0

Aynı sorunu yaşadım ve daha da kötüsü, üç taahhüdü yeniden dağıtıyordum ve ikinci işlemdeki çatışmaları çözdükten sonra, "yeniden taban - devam et" yerine "taahhüt ettim".

Sonuç olarak bu git reflog'um vardı

Kırıkaza'nın çözümünü uyguladığımda, sorunlu olan ikinciyi değil, sadece üçüncü commit'i geri aldım ..

Gördüğünüz gibi, geri ödeme, uzak / kaynak / ana şubeden bir ödünç alma ile başlar ve daha sonra, reflog'da önceki üç işlem olarak (çıkıştan önce) görünen üç işlemimi uygular.

Daha sonra, temiz bir temelden, yeniden ödemeden önce yeniden başlatmak istiyorsanız, yeniden ödeme işleminin çıkışından hemen önce hash'e sıfırlayabilirsiniz. Benim durumumda (resme bakın):

git reset --hard 859ed3c

Sonra yenisine başlayabilirsiniz git rebase.


0

Git yeniden tabanlandım, çakışmaları düzeltdim, çakışmalarla birlikte git eklenmiş dosya ve (yanlışlıkla) kaydedildi.

Denedim git reset --soft HEAD^ve git reset --hardçözümleri göz önüne alındığında, ancak hiçbiri benim için çalıştı.

Ancak, az git rebase --abortönce işe yaradı: temiz, çalışan bir ağaçla geri ödeme başlangıcından önceye götürdü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.