Github'da ve yerel olarak son n kaydetme nasıl silinir?


127

GitHub depolarımdan birinden son 2 işlemi silmeye çalışıyorum. Önerildiği gibi denedim burada : git push -f origin HEAD^^:master. Görünüşe göre, son iki kayıt kaldırıldığı için çalışıyor.

Sonra onları yerel depomdan sildim git rebase -i HEAD~2. Bu taahhütlerle ilgili satırları kaldırıyorum ve git logdoğru şekilde kaldırılıp kaldırılmadığını kontrol ediyorum .

Bundan sonra yerel depomda bazı değişiklikler yapıyorum, yeni bir commit yapıyorum ve GitHub'a gönderiyorum. Sorun şu ki GitHub hesabımda, silmeye çalıştığım önceki iki işlemim var.

Sanırım sorun yerel depomda, çünkü Github depomu yerelime klonlarsam ve burada bazı değişiklikler yaparsam, yeni bir commit yaptığımda bu eski commit'ler GitHub'a gönderilmez.

Herhangi bir fikir?

Yanıtlar:


199

Yerel olarak son iki işlemi kaldırmak için şunu kullanmanızı öneririm:

git reset --hard HEAD^^

Rebase, burada size yardımcı olmayacak tamamen farklı bir işlemdir.


23
Bu değişikliği zaten uzak bir depoya gönderdiyseniz. Git push -f ile kaldırabilirsiniz
Ivan Fernandez

Bunu son n kaydetme sayısı için genelleyebilir misiniz?
user_19

6
@ user_19 git reset --hard HEAD^4veya gibi şeyler yapabilirsiniz git reset --hard HEAD~4. Yine de, geçmişiniz birleşmeler içeriyorsa işler biraz karmaşıklaşabilir. Buradaki ilgili bölümde revizyonların belirlenmesi hakkında daha fazla bilgi bulabilirsiniz .
KL-7

2
Son 7 kaydı silmek istersem o zaman ?? HEAD'den sonra 7 kez ^ koymam gerekir mi ... lütfen temizle beni
Gagan Gami

4
@GaganGami, bence yapardın git reset --hard HEAD~7, ama yanlışsam lütfen düzelt
Con Antonakos

105

Son 2 (iki) kaydı kaldırmak istiyorsanız, bunu yapmak için kolay bir komut var:

git reset --hard HEAD~2

Değişebilirsin 2kaldırmak istediğiniz son kaydedilmesini herhangi bir sayı için.

Ve bu değişikliği uzak konuma itmek git pushiçin force ( -f) parametresiyle bir yapmanız gerekir :

git push -f

Bununla birlikte, kaldırmak istediğiniz bu işlemlerden sonra uzaktan (Github) yeni işlemlerin olması durumunda herhangi bir komut veya ilgili seçeneklerle birlikte herhangi bir komut yapmanızı önermiyorum . Bu durumda her zaman kullanın .git-f--hardgit revert


Yaptığım değişiklikler kalacak mı?
Zuhayer Tahir

@SymfonyUser, hayır. hardKomutu verdiğinizde , bu iki taahhüdü kaybedersiniz . Değişiklikleri kaydetmek istiyorsanız diff, sıfırlamayı uygulamadan önce bu taahhütlerin bir dosyasını oluşturun .
Dherik

3
İstersen @ZuhayerTahir sadece geri almak için işlemekle sonra sadece bunu son 5 kaydedilmesini için git reset HEAD~5(kullanmayın hard). Bu şekilde, değişikliklerinizi aşamalı bir durumda (yani taahhüt edilmemiş) alacaksınız. Benim için bu cevabı gör .
Honey

@Honey Cevabınız için teşekkür ederim. Ben de aynı sonuca vardım.
Zuhayer Tahir

29

Aşağıdakiler benim için çalışıyor

git reset HEAD~n

Yalnızca birini kaldırdığı için nyerel depodan son taahhütleri HEAD^kaldırır. Bu değişiklikleri uzaktan kaldırmanız gerekirse, uzaktan kumandanın arkasında olacağınız için zorla itmeniz gerekebilir.

git push -f origin <branch>
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.