Git: İtmeden sonra taahhüt edilen dosyayı kaldır


113

Git'te taahhüt edilmiş bir dosyayı geri döndürme olasılığı var mı? GitHub'a bir kayıt gönderdim ve sonra aktarılmasını istemediğim bir dosya olduğunu fark ettim (değişiklikleri bitirmedim).


1
Bir itmeden sonra dosyayı GitHub'dan tamamen kaldırmak istiyor musunuz? Aksi takdirde sadece: git rm <file>, git push.
rdrmntn


Yanıtlar:


153

güncelleme: daha güvenli yöntem eklendi

tercih edilen yol:

  1. dosyanızın önceki (değişmemiş) durumunu kontrol edin; çift ​​çizgiye dikkat edin

    git checkout HEAD^ -- /path/to/file
    
  2. taahhüt et:

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. itin, kuvvet gerekmez:

    git push
    
  4. bitmemiş işinize geri dönün, tekrar yapın (3 kez yukarı ok):

    git checkout HEAD^ -- /path/to/file
    

etkili bir şekilde 'taahhüt edilmeyen':

Depo HEAD'in son işlemesini değiştirmek için, yanlışlıkla zorlanan çalışmanızı karartarak, onu çoktan çekmiş olabilecek ve gri saçları çıkacak ve yerel şube başkanını uzlaştırmaya çalışırken çok zaman kaybedecek olan meslektaşınızla potansiyel olarak bir çatışmaya girerek merkezi olanla:

Dosya değişikliğini son işlemeden kaldırmak için:

  1. dosyayı son işlemden önceki durumuna geri döndürmek için şunu yapın:

    git checkout HEAD^ /path/to/file
    
  2. son kaydı geri alınan dosyayla güncellemek için şunu yapın:

    git commit --amend
    
  3. güncellenmiş kaydı depoya aktarmak için şunları yapın:

    git push -f
    

Gerçekten, daha önce bahsedilen tercih edilen yöntemi kullanmayı düşünün.


1
Bir projedeki tek geliştirici siz değilseniz, gerçekten git push -f kullanmamalısınız. Değerinden çok daha fazla sorun yaratır. Dosyayı kaldırın ve ardından yeni bir işlem yapın.
richardm

1
@ user553086 daha fazlasını kabul edemedi. Şimdi daha iyi?
xor

Tarihte daha eski taahhütler ile bu yapılabilir mi? Örneğin bunu ile yapabilir miyim git checkout HEAD~2 /path/to/file? Düzenleme: Benim durumumda istediğim gibi görünüyorgit rm /path/to/file
starscream_disco_party

1
Az önce beni 4 saat kurtardın kardeşim!
Tosin Onikute

59

Dosyayı uzak depodan kaldırmak istiyorsanız, önce --cache seçeneği ile projenizden kaldırın ve ardından itin:

git rm --cache /path/to/file
git commit -am "Remove file"
git push

(Bu, dosya uzak depoya birkaç işlemden önce eklenmiş olsa bile çalışır) Göndermek istemediğiniz dosya uzantılarını .gitignore'a eklemeyi unutmayın.


2
Bu, dosyaları bu kaydetmeden kaldırır, ancak dosyalar eski kaydetmelerde hala görülebilir.
Ken

30

Yalnızca bir dosyayı belirli bir revizyona geri döndürebilirsiniz.

İlk önce dosyanın değiştirildiği kayıtları kontrol edebilirsiniz.

git log path/to/file.txt

Ardından revizyon numarasıyla dosyayı ödünç alabilirsiniz.

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

Bundan sonra taahhüt edebilir ve tekrar itebilirsiniz.


7

Dosyayı doğru durumda sıfırlayın, kesin ve tekrar itin.

Henüz hiç kimsenin değişikliklerinizi almadığından eminseniz, --amendkaydetme sırasında önceki kaydetmeyi değiştirmek için (yani geçmişi yeniden yazmak) ve ardından itmek için kullanabilirsiniz. -fYine de, itmeyi zorlamak için iterken seçeneği kullanmanız gerekeceğini düşünüyorum .


4
  1. Son işlemenin karma kodunu alın.

    • git log
  2. Kaydetmeyi geri alın
    • git revert <hash_code_from_git_log>
  3. Değişiklikleri itin
    • git push

GHR'ye bakın. ihtiyacın olanı alabilirsin, umarım bu yararlıdır

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.