&Quot;git reset" düz İngilizce ne yaptığını açıklayabilir misin?
interesting posts git reset
hakkında inceliklerini açıklayan görmedim.
Bu konuda daha fazla bir şey okudum ne yazık ki, daha tam olarak anlamadığım gibi görünüyor. SVN bir geçmişim var gel ve Git tamamen yeni bir paradigma. Mercurial kolayca aldım ama Gıt çok daha teknik.
git reset
hg revert
, bulunur ama farklılıklar var gibi görünüyor bence.
Tam olarak git reset
ne yapar? Lütfen detaylı açıklamalar hakkında şunları içerir:
- seçenekleri
--hard
,--soft
--merge
; - kullanın
HEAD^
HEAD
HEAD~1
; . garip gösterimde - beton kullanım durumları ve iş akışı;
- çalışma kopyası,
HEAD
ve genel stres seviyesi sonuçları.
CEVAP
Doktorlar bunun için gerçekten çok iyi olduğunu düşünüyorum - belki de git onları gerçekten de anlaşılmak için çalıştığını bir anlamda biraz ihtiyacım var. Eğer dikkatlice okumak için zaman ayırın, özellikle de bu tablolar, çeşitli seçenekleri ve durumlar için dizin ve çalışma ağacındaki dosyaların Birleşik Devletleri detaylandırma faydalıdır. (Ama evet, çok yoğun çalışıyorlar - ben sadece onları okumak ve onaylamak için biraz zaman alır zaten bildiğim bir şeyi söylemek.)
Genel olarak, git reset fonksiyonu mevcut şube alıp başka bir yere nokta sıfırlamak ve muhtemelen dizin ve çalışma ağacı boyunca getir. Eğer ana şube (teslim alınmış) böyle ise daha somut olarak,:
- A - B - C (HEAD, master)
ve master C git reset B
oraya taşımak için kullanamazsınız B işaret etmek istediğini fark:
- A - B (HEAD, master) # - C is still here, but there's no branch pointing to it anymore
Anlatılanlar: Bu bir ödeme farklıdır. Eğer git checkout B
, çalıştırmak istiyorsanız bu olsun istiyorum:
- A - B (HEAD) - C (master)
Müstakil bir devletin BAŞKANI oldu. 20**, iş ağaç, dizin tüm B
maç ama ana şube C
geride kaldı. Eğer bu noktada D
taahhüt yaparsanız, istediğiniz şey muhtemelen değil bu alırsınız:
- A - B - C (master)
\
D (HEAD)
Unutmayın, sıfırlama, sadece bir şube güncelleştirmelerini tamamlar yapmaz işlemek için bir işaretçi () farklı işlemeye işaret. Gerisi sadece dizini ve çalışma ağaç ne detay.
Durumlarda kullanın
Bir sonraki bölümde çeşitli seçenekler benim açıklamaları içinde git reset
ana kullanım durumları çok koruyorum. Öyle olduğu için çok çeşitli şeyler; ortak iplik tüm almalarını sıfırlama Şubesi, dizin ve/veya iş tree point/maç verilen bir taahhüt.
Şey dikkatli olmak
--hard
gerçekten işe kaybetmesine neden olabilir. İş ağacı değiştirir.git reset [options] commit
çeşit taahhüt kaybetmesine neden olabilir. Oyuncak yukarıdaki örnekte,C
taahhüt kaybettik. Hala repo vegit reflog show HEAD
ya da aslında herhangi bir şube erişilebilir değil amagit reflog show master
, artık bakarak bulabilirsiniz.Git 30 gün sonra kalıcı olarak tamamlar, ama yine de bir şube üzerine C kurtarabilirsiniz kadar böyle (
git checkout C; git branch <new branch name>
) siler.
Argümanlar
Man sayfasına Paraphrasing, en yaygın kullanım şekli şöyledir verilen commit durumlarına verilen yolları sıfırlar git reset [<commit>] [paths...]
,. Eğer yolları sağlanan değilse, tüm ağacı sıfırlanır ve eğer sağlanan değil mi eğer işlemek, KAFASI (geçerli tamamlama) aldı. Bu gıt komutları (örneğin ödeme, fark, günlük, tam anlamı değişir gerçi) arasında ortak bir desen, çok da şaşırtıcı olmamalı.
Örneğin, git reset other-branch path/to/foo
sıfırlar her şey yolunda//foo için haliyle diğer-şube, git reset -- .
sıfırlar geçerli dizini için kendi devlet BAŞKANI ve basit git reset
sıfırlar herşeyi yerli Devlet BAŞKANI.
Ana ağaç ve dizin seçenekleri çalışma
Sıfırlama sırasında iş ağaç ve dizin ne olacağını kontrol etmek için dört ana seçenek vardır.
Unutmayın, dizin gıt "alan" bunları hazırlık git add
taahhüt dediğimde. eylemi yapıyor
--hard
her şey için sıfırlayın. taahhüt maç yapar. Bu en kolay anlamak için, muhtemelen. Yerel değişiklikleri her dayak yemişe döndüm. Bir birincil kullanımı işinizi fırlatıp, ama taahhüt geçiyor:git reset --hard
39*, yani* şube değişikliği yok ama tüm yerel değişiklikleri kurtulmak. Diğeri de sadece bir yerden başka bir yere bir şube taşıma ve dizin/senkronize ağaç iş tutuyor.Bu gerçekten işe ağacınızı değiştirir, çünkü seni kaybetmek iş yapabilir.reset --hard
çalıştırmadan önce yerel çalışma atmak istiyorum çok çok emin olun.--mixed
varsayılan, 42 *yani* demek 43**. Endeks, ama iş ağaç sıfırlar. Bu tüm dosyaları sağlam olduğu anlamına gelir, ama orijinal uygulayın ve bir sıfırlama arasında herhangi bir fark yerel değişiklikler (ya da izlenmeyen dosyaları) gıt durumu olduğu gibi görünecektir. Bazı kötü tamamlar mı hayal ettin bunu kullanın, ve yeniden değerlendirmeyi çözebilir, yaptığın işe devam etmek istiyorum. Tamamlamak için, dizini yeniden (git add ...
) dosya eklemek gerekir.--soft
dizin dokunmazyaağaç iş. Tüm dosyaları--mixed
ama tüm değişiklikleri gıt durumu (yani işlemek için hazırlık kontrol)changes to be committed
olarak göstermek gibi sağlam. Bazı kötü işleyen yaptığınızın farkına ne zaman bu kullanmak, ama işin iyi - tüm yapmanız gereken farklı bir şekilde uygulanır. Endeks Eğer isterseniz hemen işleyebilirsin dokunulmamış, - sonuç işlemek önce reset neredeydin olarak hepsi aynı içeriğe sahip olacak.--merge
en son eklenen ve başarısız bir birleştirme iptal size yardımcı olmaktır. Bugit merge
aslında kirli bir iş, bir ağaç (yerel değişiklikler) ile birleştirme girişimi bu değişiklikleri dosyaları ile birleştirme etkilenmemiş olduğu sürece izin verir, çünkü bu gereklidir.git reset --merge
dizin (--mixed
- tüm değişiklikler yerel değişiklikler olarak göstermek gibi) sıfırlar ve dosyalar etkilenen birleştirme, ama yalnız Diğerleri yaprakları sıfırlar. Umarım bu kötü birleştirme önce ne kadar her şey geri gelecektir. Sadece birleştirme uzakta sıfırlama, aslında Şubesi taşımak istemiyorum çünkü genelliklegit reset --merge
olarak kullanırsın (git reset --merge HEAD
anlamına gelir). (HEAD
birleştirme başarısız oldu bu yana henüz güncelleme, olmadı)Daha somut, varsayalım ... değiştirilmiş dosyaları A ve B, ve girişimi için birleştirme bir şube olan değiştirilmiş dosyaları C ve D birleştirme başarısız olması için bir neden ve karar iptal.
git reset --merge
kullanın. C ve DHEAD
, onlar nasıl geri getiriyor ama denenen bir parçası değillerdi beri yalnız B, birleştirme için değişiklikler bırakır.
Garip gösterimde
"Gösterim" (HEAD^
58*) söz sadece taahhüt belirtmek için kısaltma, 3ebe3f6
gibi karma bir isim kullanmak zorunda kalmadan. garip Tam örnekler ve sözdizimi ile ilgili bir sürü git-rev-ayrıştırmak için man sayfasına, "specifying revisions" section belgelenmiştir. Şapka ve tilde aslında different things demek
HEAD~
HEAD~1
kısa ve taahhüt ilk veli demektir.HEAD~2
commit ilk ebeveynin ilk üst anlamına gelir.HEAD~n
gibi düşün "n BAŞ önce tamamlar" veya "KAFA inci nesil atası".HEAD^
(ya daHEAD^1
) da tamamlama ilk veli demektir.HEAD^2
bu taahhüt anlamına gelirikinciüst. Unutmayın, birleştirme işlemek normal bir iki veli, ilk üst - birleştirilmiş tamamlama ve ikinci üst birleştirilmiş olduğunu taahhüt. Genel olarak, birleştirir aslında keyfi olarak birçok anne-baba (ahtapot birleştirir).^
~
operatörler olabilir birlikte sinirli gibiHEAD~3^2
, ikinci ebeveynin üçüncü nesil atasıHEAD
,HEAD^^2
ikinci ana ortaklığın ilk anaHEAD
hattaHEAD^^^
eşdeğerdirHEAD~3
.
'arasında " fark;git reset&qu...
Nasıl bir "" değil; SERİ ile ...
Bir "ekran" sayfasını kullan...
Tespit "sürükleme" jQuery mi...
"x" --önbelleğe; vs "git...