Son gitme işlemine geri dön


120

Az önce yaptım

git commit -m "blah"

sonra bazı dosyalar ekledim, mevcut dosyalarımda henüz eklenmemiş / kaydedilmemiş olanları nasıl geri alabilirim ve kaldırabilirim?


15
hayır, OP'nin istediği bu değil - son taahhüdü geri almak değil, son taahhüdüne geri dönmek istediği açıktır. bazı dosyalar eklediğini ve sonra teslim ettiğini söylemedi. o kadar açık ki son taahhüdü istiyor.
Paul

1
Bu süper yaygın soruya bir cevap bulmak çok zor
Sam

Yanıtlar:


211

Caveat Emptor - Önümüzdeki yıkıcı komutlar.

Azaltma - git reflog ihtiyacınız olursa sizi kurtarabilir.


1) GERİ AL yerel dosya değişiklikleri ve TUTUN senin son tamamlama

git reset --hard

2) Yerel dosya değişikliklerini GERİ ALIN ve son kaydınızı KALDIRIN

git reset --hard HEAD^

3) TUTUN yerel dosya değişikliklerini ve KALDIR senin son tamamlama

git reset --soft HEAD^

20
Bu komut önceki işlemenizi siler, bu yüzden dikkatli kullanın! git reset --hard daha güvenli
rudivonstaden

9
WTF bunu 36 ek oyla doğru cevap olarak yapıyor. Bunun için bir gün çalıştım ... çünkü yorumu değil cevabı okudum. Bu sorunun doğru cevabı değil!
Chris Nevill

1
Tamam, hepsi kaybolmadı! Git reflog yapabilirsiniz, bu, sıfırlamadan önce yaptığınız işlemleri görmenizi sağlar. Daha sonra bu kayıtlara göz atabilirsiniz
Chris Nevill

3
Değeri ne olursa olsun, OP'nin sorusunu "commit'i nasıl geri alırım ve mevcut dosyaları nasıl kaldırırım" olarak yorumlamıştım, ama bu belirsizdi ve hala da öyle. OP sadece "eklenmemiş veya işlenmemiş mevcut dosyaları nasıl kaldırırım"
deseydi daha farklı anlardım

2
Git, Alan Kays ifadesinin antitezidir Basit şeyler basit olmalı, karmaşık şeyler mümkün olmalıdır. ... özellikle ilk bölümünden. Yine de cevabınız için teşekkür ederim. yardımcı oldu.
0xC0000022L

46

Yeni eklenen içerikleri ve halihazırda hazırlanmış (bu nedenle dizine eklenen) dosyaları kaldırmak istiyorsanız, şunu kullanın:

git reset --hard

En son kaydetmenizi de kaldırmak istiyorsanız ("blah" mesajını taşıyan) o zaman kullanmak daha iyi:

git reset --hard HEAD^

İzlenmeyen dosyaları (yani dizine henüz eklenmemiş yeni dosyaları) ve klasörleri kaldırmak için şunları kullanın:

git clean --force -d

git reset --hard HEAD ^ son kaydetmemi kalıcı olarak kaldırır mı? geri dönemeyecekmişim gibi
user137717

"git clean --force -d" .gitignored klasörlerini de kaldırıyor gibi görünüyor
Alexey Timokhin

15

git reset --hard çalışma dizinini son işlemeye zorlar ve yeni / değiştirilmiş dosyaları siler.


2
bunu yaptı, ancak dosyalar hala orada. (izlenmemiş dosyalar hala orada)
Blankman

bu durumda bir "git zulası" yapabilirsiniz
jacktrade

3
olumlu oy verildi, çünkü bu, OP'nin açık ve kesin sorusuna verilen tek açık ve kesin cevaptır.
Paul

4

git revert HEAD^Sondan son işleme geri dönmek için kullanarak bir kaydetmeyi geri döndürebilirsiniz . HEAD ^ yerine kimliği kullanarak geri döndürülecek kaydetmeyi de belirtebilirsiniz.


Bu, söylediğin anlamda "geri dönmüyor". Bu bir ters işleme oluşturur.
Stefan Kendall


3

Son işlemden bu yana yerel dosya değişikliklerini UNDO yapmanın kolay ve kusursuz bir yolu , onları yeni bir şubeye yerleştirmektir:

git branch changes
git checkout changes
git add .
git commit

Bu, değişiklikleri yeni dalda bırakır. Son kaydetmeye geri dönmek için orijinal şubeye geri dönün:

git checkout master

Yeni şube, orijinal şubeyi bozma riski olmadan değişiklikleri geri döndürmenin farklı yollarını uygulamak için iyi bir yerdir.

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.