it-swarm.asia

1 işlenmeyi nasıl geri alabilirim?

İtmediğim 2 taahhüt var:

$ git status
# On branch master
# Your branch is ahead of 'faves/master' by 2 commits.

İlkiyi (en eskisi) nasıl geri alabilirim, ikincisini nasıl tutabilirim?

 $ git log
commit 3368e1c5b8a47135a34169c885e8dd5ba01af5bb
...

commit baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e
...

Buradan:

http://friendfeed.com/harijay/742631ff/git-question-how-do-i-rollback-commit-just-want

Sadece yapmam gerekir mi?

git reset --hard baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e

Yani?

125
n179911

Gitmenin en güvenli ve muhtemelen en temiz yolu etkileşimli olarak yeniden inşa etmektir.

git rebase -i HEAD^^

Veya,

git rebase -i baf8d5e7da9e41fcd37d63ae9483ee0b10bfac8e^

Oradan, bir veya daha fazla komisyonu önceki taahhüdün içine koyan komisyonları squash edebilirsiniz. Taahhüdün tamamını tamamen silmek için, çizgiyi listeden silin.

git revert ile bir taahhüdü geri alabilirsiniz, ancak tarihe daha istenmeyen mesajlar ekleyecektir. Git'e hemen geri dönmemesini söylemek için -n parametresini kullanın. Etkileşimli olarak rebase edebilir ve bir şeyi temiz tutmak için bunları önceki bir sisteme ezebilirsiniz.

Burada birlikte çalıştığınız iki sözleşme aynı dosyaları etkiliyorsa, bir birleştirme çatışması görebilirsiniz.

Depoyu git reset --hard ile sıfırlamak, geri alınamayacağı için özenle yapılmalıdır.

Yeniden yazma tarihi özenle yapılmalıdır.

94
jtimberman

Bu eğer http://nakkaya.com/2009/09/24/git-delete-last-commit/ den ve eğer benim için işe yaradıysa

Git Son Yazmayı Sil

Geceleri geç saatlerde kahvem bittiğinde, sahip olmamam gereken şeyleri yapıyorum. Sonra, önümüzdeki 10 - 15 dakikayı, yaptığım son taahhüdü nasıl kaldıracağımı googling ile geçiriyorum. Böylece üçüncü zamandan sonra bir kayıt yapmak istedim, böylece daha sonra başvurabilirim.

Eğer önemsiz işlediniz, ancak itmediyseniz,

git reset --hard HEAD~1

HEAD ~ 1 kafadan önce taahhüt için bir steno. Alternatif olarak, sıfırlamak istediğiniz karma değerin SHA-1'ine bakabilirsiniz. --Hard kullanıldığında, çalışma ağacındaki izlenen dosyalarda yapılan değişikliklerin, baştaki onay kaybından bu yana yapıldığını unutmayın.

Yaptığınız işi silmek istemezseniz, taahhütü silecek olan --soft seçeneğini kullanabilirsiniz, ancak git durumu ile birlikte değiştirilen tüm dosyalarınızı "Taahhüt edilecek Değişiklikler" bırakacaktır.

Şimdi zaten bastırdıysanız ve birisi benim durumumda olan birini çekti ise, git reset kullanamazsınız. Ancak bir git geri dönüş yapabilirsiniz.

git revert HEAD

Bu, yanlışlıkla yapılan taahhüdün getirdiği her şeyi tersine çeviren yeni bir taahhüt oluşturacaktır.

51
iStryker

Hayır! git-reset - hard seni tarihe geri döndürecek. Aradığın şey git devri, ki bu herhangi bir taahhüdü geri alacak.

8
Peltier

Bunu daha yeni yaptım:

git rebase -i HEAD^^

Berbat ettim de yaptım

git rebase --abort

Sonra tekrar yaptı. Sonra böyle itmek zorunda kaldı:

git Push Origin master -f

Ve geri aldığımdan daha yeni olan taahhütleri mahvetti. Harika çalıştı.

5
hamstar

Jtimberman'ın git reset --hard 'un geri alınamayacağı hakkındaki yorumuna bakıldığında, bu tam olarak doğru değildir. Buraya bakın: https://stackoverflow.com/questions/5473/undoing-a-git-reset-hard-head1

4
mattd

Hayır, git reset --hard baf8d5e3368e1c taahhüdünü siler ve HEAD daha sonra baf8d5e konumunda olur.

3368e1c taahhüdünü korumak ve bad8d5e taahhüdünü silmek istiyorsanız, en kolay çözüm "git rebase -i HEAD~2" yapmaktır (yani, son iki işlemin etkileşimli olarak yeniden yapılandırılması). Bu komut, taahhüt mesajı düzenleyicinizi başlatır ve son iki görevin her biri için bir satır görürsünüz. Orada sadece bad8d5e taahhüt satırını silin ve kaydedin. git daha sonra tarihinizi yeniden yazacak ve ikinci taahhüt ortadan kalkacak.

İleti mesajı düzenleyicide squash, edit, vb. Gibi kullanabileceğiniz başka faydalı komutlar da vardır. Etkileşimli rebase çok güçlü!

Birisi bu taahhütleri görmüşse bunu yapmayın (Deponuzu itin veya çekin)!

4
knweiss
git reset --hard {ref}

eğer depoda sadece bir başka taahhüt varsa (örneğin, ilk taahhüt ve 1 tane daha) bir taahhüdü geri almanın tek yoludur. Yolların geri kalanı (geri döndürme, yeniden düzenleme), en azından gitmeden önce çalışmayı reddediyor 1.7.5.1.

git resetgit gc ile takip ederseniz, git aslında eski işleme verilerini repodan tamamen siler.

1
squeegee
git checkout <treeish> -- /path/to/dir

Bu,/path/to/dir için verilen “ağaç gibi” dizini geri getirecektir.

1
lokeshpahal

Bunu, son klasörün karma kodlarını elle depo klasöründeki HEAD dosyalarından düzenleyerek çalışmasını sağladım:

"centralRepository\refs\heads\master"
"centralRepository\refs\heads\branch2"

Ondan önce, yerel olarak yaptığım UNMERGE işlemlerini kökene itmeyi asla başaramadım. Merkez Depo'ya "bazı hakemlere itirazda bulunamadığını" söyledi.

0
Leandro M