&Quot;git reset" düz İngilizce ne yaptığını açıklayabilir misin? | Netgez.com
SORU
27 Mart 2010, CUMARTESİ


&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
27 Mart 2010, CUMARTESİ


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 ve git reflog show HEAD ya da aslında herhangi bir ÅŸube eriÅŸilebilir deÄŸil ama git 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. Bu git 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ü genellikle git 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 D HEAD, 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 da HEAD^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 gibi HEAD~3^2, ikinci ebeveynin üçüncü nesil atası HEAD, HEAD^^2 ikinci ana ortaklığın ilk ana HEAD hatta HEAD^^^ eÅŸdeÄŸerdir HEAD~3.

caret and tilde

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 24 Канал

    24 КанаÐ

    5 ÅžUBAT 2006
  • Elly

    Elly

    3 EKİM 2005
  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007