Git çekme nasıl geri alınır?


238

Uzak kökte istenmeyen taahhütler nedeniyle git çekme işlemimi geri almak istiyorum, ancak hangi revizyona geri dönmem gerektiğini bilmiyorum.

Git uzak kökeni çekmeden önce nasıl devlete geri dönebilirim?


4
Yan not: etmek yararlı bulabilirler git fetch upstream, sonra hızlı bir göz atın git diff upstream/branchiçeri birleştirme ne olacağını görmek için her şey iyi ise, o zaman devam edin.git merge upstream/branch
Şahbaz'ın

1
Sen tüm sokak kredi kaybeder ve herhangi yenilikçi brogrammer yapmanız görürse bir hafta ödeme sabitleneceğini git bir GUI komutları, ancak her iki GitHub Masaüstü ve Atom güvenli, basit düğmeleri undokolayca ve açıkça sahne ve unstage dosyalara kaydedilmesini ve onay kutularını. GUI'ler de insanlar!
Dem Pilafian

Yanıtlar:


391

Veya diğer yanıttan daha açık yapmak için:

git pull 

hoppala?

git reset --keep HEAD@{1}

1.7.1'den eski git sürümleri yoktur --keep. Bu sürümü kullanırsanız kullanabilirsiniz --hard- ancak bu, yerel değişiklikleri kaybettiği için tehlikeli bir işlemdir.


Yorum yapan kişiye

ORIG_HEAD, HEAD'ın önceki durumudur, muhtemelen tehlikeli davranışları olan komutlar tarafından geri döndürülmesi kolaydır. Git'in yeniden bloke edilmesi artık daha az yararlıdır: HEAD @ {1}, ORIG_HEAD ile kabaca eşdeğerdir (HEAD @ {1}, her zaman HEAD'ın son değeri, ORIG_HEAD, tehlikeli işlemden önce HEAD'in son değeridir)


2
HEAD @ {1} ve HEAD ^ arasındaki fark nedir?
hugemeow

7
@hugemeow Bu güzel bir SO sorusu olurdu. Bu arada bunu man git-rev-parseaçıklar. akımın HEAD@{1}sembolik HEADolarak önceki değeri reflogiken HEAD^, akımın (ilk) ana revizyonudurHEAD . Bu ikisinin eşdeğer olması gerekir (örneğin, bir rebase, donanımdan sıfırlama, şube anahtarı ve benzeri şeylerden sonra). Reflog için bağlantılı makaleyi okuyun. Şerefe
sehe

10
PowerShell kullanıcıları, köşeli parantezlerle köşebentlerden kaçarlar:git reset HEAD@`{1`}
Robert Claypool

3
ss64.com/ps/syntax-esc.html Yazmak istediğinizi düşünüyorum HEAD@`{1`}, ya da bu nedenle POSIX mermilerinde işe 'HEAD@{1}'
yarayan şeyleri

2
Ben sadece çekme sıfırlamak değil, aynı zamanda benim taahhüt = (
falsarella

67

git reflog showsize HEAD tarihini göstermelidir. Bunu daha önce nerede olduğunuzu bulmak için kullanabilirsiniz pull. Sonra yapabilirsiniz resetsizin HEADişlemek.


git reflog show bu çıktıyı verdi: c9e5e4d HEAD @ {0}: pull: Fast forward 1c86a22 HEAD @ {1}: pull origin master: Fast forward 05c141a HEAD @ {2}: pull: Fast forward HEAD'ı güvenli bir şekilde HEAD'e sıfırlayabilir miyim @ {1}
Kartins

Sehe'nin diğer cevabı oraya nasıl gidileceğine dair detaylara sahip.
Noufal Ibrahim

Bu, tarihime bir şekilde serpiştirilmiş birleştirme taahhüt ettikten sonra felaket bir taahhütten sonra süper yararlı oldu. Reflogda son bilinen bir iyiyi arayarak ve ardından zorla iterek onları çıkardım.
Domenic

Ya pullilk eylemdir? Eğer pullaltındadır HEAD@{1}ve her bundan önce hiçbir şey, nasıl bundan önce bir duruma dönebilirim?
Hendra Uzia

Depo yeniden oluşturulsun mu?
Noufal Ibrahim

29

Bu benim için çalıştı.

git reset --hard ORIG_HEAD 

Bir birleştirmeyi geri alma veya çekme:

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)

Bunu kontrol edin: Git için HEAD ve ORIG_HEAD .


17

<SHA#>Gitmek istediğiniz taahhüdü bulun . Github'da veya yazarak git logveya git reflog showkomut satırında bulabilirsiniz ve ardından git reset --hard <SHA#>


Taahhüt için ne var?
Martin

Üzgünüm, bunu düzelttim<SHA#>
Nina

Bir şeyi geri almak zorunda kaldığımda en çok kullandığım komut bu
Kartins

2

Gönderen https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

Bir birleştirme işlemini geri alma veya kirli çalışan bir ağacın içine çekme

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

Çalışma ağacınızda yerel değişiklikler olsa bile git pull, diğer daldaki değişikliğin onlarla örtüşmediğini bildiğinizde güvenle söyleyebilirsiniz .

Birleşmenin sonucunu inceledikten sonra, diğer daldaki değişikliğin tatmin edici olmadığını görebilirsiniz. Koşu git reset --hard ORIG_HEAD , bulunduğunuz yere geri dönmenizi sağlar, ancak istemediğiniz yerel değişikliklerinizi atar. git reset --mergeyerel değişikliklerinizi tutar.

Ayrıca bkz. Https://stackoverflow.com/a/30345382/621690


Teşekkürler!
Thiago Martins
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.