Uzak bir Git deposunu geri alma


110

Uzak bir Git depom var ve son ntaahhütleri unutulmaya geri döndürmem gerekiyor .

Yanıtlar:


135

git revert <commit>…Tüm n kaydetme için kullanabilir ve ardından her zamanki gibi itip geçmişi değiştirmeden bırakabilirsiniz .

Veya ile "geri dönebilirsiniz" git reset --hard HEAD~n. Herkese açık veya paylaşılan bir depoda bastırıyorsanız, orijinal şubenize bağlı olarak diğerlerinin çalışmalarını ayırabilir ve bozabilirsiniz. Git bunu yapmanızı engelleyecektir, ancak git push -fgüncellemeyi zorlamak için kullanabilirsiniz .


5
git reset --hard [sha1]Şunu kullanarak belirli bir kaydetmeye geri dönebilirsiniz : burada sha1, kesinleştirme karma tanımlayıcısıdır.
pisaruk

7
Çalışma dizini olmadığı için uzak bir depoda get reset --hard kullanamazsınız. Asıl soru sadece uzak bir repo olduğunu, yerel bir repodan söz edilmediğini belirtir.
Hazok

2
sadece bir not, git push -f tüm yerel şubeleri uzaktan kumandalarına
zorlayacak

Kullanmanın revert, özellik dallarınızın "zaten" birleştirilmiş olarak değerlendirilmesine neden olacağını lütfen unutmayın . Yani bu dalların çünkü en edilmektedir aslında birleştirilen. Ancak değişiklikler geri alındı. Çözüm: Geri döndürülen taahhüdü kesin seçin veya geri alın .
Benedikt

@Benedikt reset --hard, özellik dallarının zaten birleştirilmiş olarak değerlendirilmesine de neden oluyor mu? Benim varsayımım, olmazdı (nerede revertolurdu).
Marcus Leon

37

elmarco haklı ... onun önerisi, paylaşılan / herkese açık depolar (veya en azından genel şubeler) için en iyisidir. Paylaşılmadıysa (veya başkalarını bozmaya istekliysen), belirli bir ref:

git push origin old_master:master

Veya, belirli bir SHA1 kaydı varsa (kısaltılmış biçimde 1e4f99e diyelim), geri dönmek isteyebilirsiniz:

git push origin 1e4f99e:master

9

Neyse ki , istenmeyen commit'i tamamen ortadan kaldıran Pat Notz'un çözümünü kullanacak bir konumdaydım . Ancak, başlangıçta hatayı aldım

error: failed to push some refs to 'ssh://git@gitrepo.git'
To prevent you from losing history, non-fast-forward updates were rejected*

Ancak force ( -f) seçeneği eklendiğinde bu hatanın üzerine yazılır

git push -f origin 52e36b294e:master

3

Uzak depoya doğrudan erişiminiz varsa, her zaman kullanabilirsiniz:

git reset --soft <sha1>

Bu, var olmayan çalışma dizinini değiştirme girişimi olmadığı için çalışır. Daha fazla ayrıntı için lütfen orijinal yanıta bakın:

Git bare deposunda son yürütmeyi nasıl kaldırabilirim?


2
Neden --softgerekli olsun ki? Muhtemelen aynı şeyi git resetmod bayrağı olmadan sade bir şekilde de yapabilirsiniz.
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.