Bir yeniden temele nasıl geri dönülür


106

Git'te, memnun değilseniz bir yeniden tabanı nasıl geri alırsınız?

Git yeniden taban için kuru çalıştırmaya sahip değil. Yeniden ödeme yaptıysam ve henüz itmediysem, sanki hiç olmamış gibi daha önce nasıl geri dönebilirim?


4
git rebase --abort
olibiaz

2
Ne demek "başarısız"? Rebase'i tamamladınız mı ve sonuçları beğenmediniz mi? Yoksa çatışmalara mı girdiniz ve ortada geri dönüşü durdurmak mı istiyorsunuz? Sana beri, eski tahmin edemez bir çatışma, bitmemiş rebase itmek, ama çünkü onlar ediyoruz iki farklı soru sormak.
Edward Thomson

evet, eski. Teşekkürler.
user1615666

Yanıtlar:


216

Yeniden tabanlama başlamadan önceki ilk eylemi bulmak için reflog'u kullanabilir ve ardından sıfırlayabilirsiniz - tam tersine. Örneğin

$ 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

Şimdi geri ödeme başlamadan önce geri dönmelisiniz.

Sıfırlamak için doğru yeri bulmak için, sadece girişi üstüne yakın almak değil "rebase" ile başlar.

Alternatif yaklaşım

Rebase ise tek şey sen dala yapmış, değiştirir sen / hayır unpushed hareketin var yani - o zaman sadece yerel şube silebilir git branch -Dve yeniden göz atın:

$ git checkout my-branch
$ git rebase master
// not happy with result
$ git checkout master
$ git branch -D my-branch
$ git checkout my-branch

Ya da aynı etkiyle, başlangıç ​​dalına sıfırlayabilirsiniz:

$ git reset --hard origin/my-branch

Bunu, başka kaldırılmamış taahhütleriniz varken yaparsanız, onları kaybedersiniz. Bu durumda, commit (leri) yaptığınız reflog girişine geri dönmek için yukarıdaki reflog yaklaşımını kullanın.


11
Bir başka kullanışlı kısayol: ORIG_HEADyeniden temel, yeniden oluşturulan dalın orijinal hash değerine ayarlanır . Yani oldukça numarasını 2 bulmaktan daha HEAD@{2}, sadece kullanabilirsiniz ORIG_HEAD... ama sadece eğer ORIG_HEADhala bozulmamış olduğunu. Bir grup Git komutu onu ayarlar (çeşitli koşullar altında yeniden tabanla, am, sıfırla ve birleştir).
torek

1
Teşekkürler bayım! Bu konuda harika yardım :)
Alec

1
teşekkür ederim kaynak kodumu geri .... kullandıktan sonra bu $ git reset HEAD @ {2} --hard
reza rahmad

Yerel şubeyi silip tekrar çekmeyi önerdiğim için olumlu oyumu alıyor!
quicklikerabbit

1
Bu bir hayat kurtarıcıdır. Teşekkür ederim @Robbie
Nelson Katale

42

Rebase, eski durumun bir yedeğini olarak tutar ORIG_HEAD.
Böylece son yeniden ödemeyi şu şekilde geri döndürebilirsiniz:

git reset --hard ORIG_HEAD

1
Bu etiketin nerede belgelendiğini biliyor musunuz?
Ben S

Bunun bazı dezavantajları var mı yoksa yeni bir özellik mi? Bu, bir yeniden blog yazmayı gözden geçirmekten çok daha kolay görünüyor.
1252748

Yeni değil. Ancak bunu genellikle yeniden ödemeden hemen sonra kullanırsınız, birkaç yeniden düzenlemeden sonra geriye dönük olarak geri dönemezsiniz vb. Bu karmaşık durumlar için yeniden günlüğe kaydetme işlerini ararsınız, ancak sadece "ayy, ne yaptım? Nasıl geri alabilirim? şimdi mi? " gayet iyi çalışıyor.
Meligy
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.