Aktarılmayan bir git komutunu kaldırın


726

Ben yaptım git commitama henüz deposuna itti değil. Bu yüzden yaptığımda git status, '# Şubeniz 1 taahhütte' usta 'dan önde.

Üst taahhüdümü geri almak istersem, yapabilir miyim:

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316

bunu git logyaptığımda verilen :

taahhüt eb27bf26dd18c5a34e0e82b929e0d74cfcaab316
Tarih: Sal 29 Eyl 11:21:41 2009 -0700


taahhüt db0c078d5286b837532ff5e276dcf91885df2296
Date: Sal Eyl 22 10:31:37 2009 -0700

9
Bu soru, kendi sorularınızın bir diğerinin kopyası gibi görünüyor: stackoverflow.com/questions/1338728/how-to-delete-a-git-commit
Brian Campbell


1
Git'teki son
Jan Zerebecki

3
TEHLİKE: reset --hardiş kaybına neden olabilir, çünkü bunu yapmak yerel dosyalarınızın (yeni işiniz) web'deki dosyalarla üzerine yazılmasına neden olur (başıma geldi). Git ile ilgili sorular ve cevaplar, komutlarının ne yaptığını ve aşağıdaki okuyucular için risklerin neler olduğunu açıkça belirtmelidir.
OrangeSherbet

Yanıtlar:


674

Aslında, kullandığınızda git reset, sıfırladığınız taahhüde başvurmalısınız ; bu yüzden db0c078taahhütte bulunmayı istersiniz .

git reset --hard HEAD^Mevcut kafadan önceki bir önceki işleme sıfırlamak daha kolay bir versiyon olacaktır ; bu şekilde taahhüt kimlikleri kopyalamak zorunda kalmazsınız.

Yaptığınız herhangi git reset --hardbir taahhüt edilmemiş değişikliği kaybedebileceğinizden, yaptığınız her zaman dikkatli olun . Sen kontrol etmek isteyebilirsiniz git statusemin çalışma kopyası temiz, yoksa orada herhangi bir değişiklik uçurmak istiyoruz emin olmak için.

Ek olarak, HEAD yerine origin/masteryorumlarda @bdonlan tarafından önerildiği gibi kullanabilirsiniz :git reset --hard origin/master


374
Veya git reset --hard origin/mastermenşei ne olursa olsun sıfırlamak için.
bdonlan

1
Sıfırlayabileceğiniz başka bir yararlı işaretçi ORIG_HEAD veya HEAD @ {1} (HEAD'in son konumu) reflogunu kullanarak genelleştirilmesidir.
Jakub Narębski

12
Okuyucu, git resetkodunuzdan önce . Arasındaki farkı: Gelecekteki kendine bir iyilik yap reset, reset --softve reset --harddaha önceki ne olur ( git addaka "İşinizi" :) Picture: bağlantı
user18099

3
Bu git statusişlemin kaldırılmasını istediğiniz taahhütte bulunanları sileceğini unutmayın (böylece a değişiklik göstermeyecek ve taahhüt kaldırılacak / değişiklikler kaybedilecektir).
Bjørn Børresen

12
NOT: git reset --hard HEAD^Taranan dosyalarda değişiklikleri kaybedeceğiniz için (değişiklikleriniz silinecek) kullanırken dikkatli olun . Bu sorunun iki dalı var: Bir taahhüdü geri döndürmek, ancak hala diskte değişiklikler yapmak içingit reset --soft HEAD~1
papigee

626

Değişikliklerinizi uzaktan

git reset HEAD~1

Çalışan kopyanın temiz olup olmadığını kontrol edin git status.

ELSE, değişikliklerinizi uzaktan kumandaya ittiniz

git revert HEAD

Bu komut son bir taahhüt / değişikliği geri alacak / kaldıracak ve daha sonra


34
Bu yanıt "itilmemiş en son git
komutunu kaldır

25
Ayrıca, son sıfırlamada yerel değişiklikleri tutarken, git reset --hard bunu yapmaz
Stanimir Stoyanov

1
benim için, bu son itilen taahhüt ve unpushed taahhüt geri alacak
CodyChan 17:18

git revert HEAD benim için itmeye hazır olduğum tüm dosyaları sildi. Dikkatli ol!
Jason Bruce

160
git reset --hard origin/master

menşei ne olursa olsun sıfırlamak için.

Bu @bdonlan tarafından yorumlarda yayınlanmıştır . Bu cevabı yorum okumayan insanlar için ekledim.


4
Bu soru yaklaşık 5 yıl önce soruldu ve bu zaten yorumlardan birinde.
Anubian Noob

1
Mevcut yerel şubeden farklıysa ne masteryapmalıyım origin/mybranch?
Pavel Vlasov

9
Bir cevap için acele ettiğimde genellikle yorumları okumuyorum ... Bir cevap olarak koyduğunuz için teşekkürler (işe yarayan basit bir soru)
Leonardo Alves Machado

Uyarı: Bu işlemin git reset HEAD~yalnızca mevcut kod değişikliklerini kaldıracağı dışında mevcut tüm kod değişikliklerinizi kaldıracağını unutmayın
Mayer Spitzer

70

Bu sorunun iki dalı vardır (Bir taahhüdü geri almak, tüm yerel değişikliklerimi kaybetmek istediğim anlamına gelmez):

1. Taahhüt edilen dosyadaki en son taahhüdü geri almak ve değişiklikleri atmak için şunları yapın:

git reset --hard HEAD~1

2. En son işlemi geri almak ancak yerel değişiklikleri (diskte) korumak için şunları yapın:

git reset --soft HEAD~1

Bu (daha sonraki komut), eğer olsaydınız sizi bulunduğunuz duruma götürecektir git add.

Bundan sonra dosyaları kaldırmak istiyorsanız,

git reset

Artık eklemeden ve sonra tekrar taahhütte bulunmadan önce daha fazla değişiklik yapabilirsiniz.


47

Konsolu yazmanız yeterlidir:

$ git reset HEAD~

Bu komut, uzak HEAD öncesinde tüm yerel taahhütleri atar


7
Cevabınızın mevcut cevaplara ne kattığını açıklayabilir misiniz?
nvoigt

Diğer cevaplar gibi - - yerel olarak yaptığınız değişikliklerin geri olmadan - Bu akım önce iterek taahhüt temizler şiddetli saç çekilme anı olabilir ki
Grant

43

Bunlardan birinin ihtiyacınızı karşılayacağına inanıyorum

1 - Tamamlama işlemini geri al ve tüm dosyaları hazırla: git reset --soft HEAD~;

2 - Tüm dosyaları geri al ve kaldır'ı geri al: git reset HEAD~;

3 - Taahhüdü geri alın ve tüm değişiklikleri tamamen kaldırın: git reset --hard HEAD~;

işte cevabı buldum


Bu cevap kabul edilmelidir: D
Aaron John Sabu

30

Zorlamadan önceki son taahhüdü kaldır

git reset --soft HEAD~1

1son iki kullanımı kaldırmak istiyorsanız, son işlem anlamına gelir 2vb. *


3
Merhaba Karina, bahsetmek --softolası cevaplara harika bir ektir, ancak nedenini de söyleyebilir misiniz? Çözümünüzü açıklamak her zaman yardımcı olur. Ayrıca İngilizce ile sopa çalışın. Thanks
Vlastimil Ovčáčík

1
--soft - taahhüdünü geri almaya çalıştığınız dosyadaki değişiklikleri kaybetmemenizi sağlar
taahhütlerini

19

Aşağıdakileri yaptığım aynı durumu yaşadım, çok daha kolay. Geçerek commit-Idbelirli için ulaşabilir gitmek istediğiniz işlemek:

git reset --hard {commit-id}

Son taahhüdünüzü kaldırmak istediğiniz için, commit-Id , işaretçinizi hareket ettirmek için ihtiyaç duyduğunuz yeri geçmeniz gerekir:

git reset --hard db0c078d5286b837532ff5e276dcf91885df2296

Sadece benim gibi yeni başlayanlar için bir uyarı - değişiklikleri tutmak istediğiniz tüm dosyaları yedekleyin, çünkü bunlar önceki sürüme geri döndürülecektir. Benim senaryom yanlışlıkla repo dizinime bir veritabanı dökümü koymak ve sonra taahhüt - Açıkçası bu dosyaları repo taahhüt etmek istemiyordu ama DID diğer dosyalarda yaptığım değişiklikleri tutmak istiyorum. Bu yüzden git reset yapmadan ÖNCE yaptığım yedeklemeden gerekli değişiklikleri kopyalayıp yapıştırmak zorunda kaldım.
user1063287

10

Bu benim işim:

İlk önce şubenizi kontrol edin (benim vaka masterşubem için):

git checkout master

Ardından uzak HEAD ^ ( tüm yerel değişikliklerinizi kaldıracak) olarak sıfırlayın , temizlemeye zorlayın ve çekin:

git reset HEAD^ --hard && git clean -df && git pull

1
Çok nükleer bir seçenektir. Sınırlı taahhüt için yumuşak sıfırlama öneririm.
c0der512

3

Bunun bir yolu, yerel şubeyi silmek ve yerel şubeniz birden fazla işlem tarafından uzaktan ilerlemişse ve tüm şubelerden ayrılmanız gerekiyorsa bu şubeyi sunucudan teslim almak olacaktır.


parlak cevap - bu sourcetree kolay tıklayın sağlar :)
Kamil Kiełczewski

1

Ben sadece aynı sorunu vardı ve sona erdi:

git rebase -i HEAD~N

(N git size gösterilecek taahhütlerin sayısıdır)

Bu, metin düzenleyicinizi ister ve ardından ilişkili satırı silerek istediğiniz taahhüdü kaldırabilirsiniz.

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.