SORU
5 Mart 2011, CUMARTESİ


Git reset --soft pratik kullanır?

Sadece bir ay için git ile çalışıyorum. Gerçekten ilk defa dün reset kullandım, ama yumuşak sıfırlama hala bana çok mantıklı gelmiyor.

Bir dizin değiştirmeden işlemek düzenlemek için yumuşak sıfırlama kullanabilirsiniz ya da benim gibi çalışma dizini, git commit --amend ile anlıyorum.

Bu iki komut gerçekten aynı (reset --soft vs commit --amend)? Pratik açıdan veya başka bir kullanım için bir sebep var mı? Ve daha da önemlisi, reset --soft herhangi bir diğer kullanımlar dışında değişiklik var bir taahhüt?

CEVAP
5 Mart 2011, CUMARTESİ


git reset HEAD devam etmektir.
Çalışma ağaç ve dizin ne olacak? soru:
--soft ile istihdamhareket HEAD HEAD.
Bu commit --amend den farklıdır:

  • yeni bir taahhüt oluşturmaz.
  • aslında KAFA herhangi bir taahhüt (commit --amend sadece . gibi haraket eder ^em>değilhareketli KAFA, geçerli yineleme için izin verirken commit)

Sadece bulundu birleştirerek örnek:

  • klasik bir birleştirme
  • bir ağacı birleştirme

(ikiden fazla Şubesi olmadığından ahtapot, birleştirilmiş) tüm birleştirme işlemek.

Tomas "wereHamster" Carnecky "Subtree Octopus merge" article onun açıklıyor:

  • Strateji birleştirme alt eğer başka bir proje için bir alt dizin içine bir proje birleştirmek istiyorsanız kullanılabilir, ve daha sonra güncel alt proje tut. Git alt modüller için bir alternatiftir.
  • Ahtapot strateji üç veya daha fazla dalları birleştirmek için kullanılan birleştirme. Normal strateji sadece iki şube birleştirme ve eğer daha fazla birleştirmek için çalışırsanız, gıt otomatik olarak geri ahtapot strateji düşüyor.

Sorun yalnızca bir strateji seçebilirsiniz. Ama bütün depoyu atomik yeni bir sürüme temiz bir tarih almak için iki birleştirmek istedim.

Bir superproject, hadi projectA ve projectA bir alt dizin içine birleştirilmiş bir proje, projectB, çağrı var.

(bu alt bölüm birleştirme)

Ayrıca birkaç yerel haller takınıyorum.
ProjectA düzenli, projectB yeni bir sürüm var her birkaç gün ya da hafta güncellenen ve genellikle projectA belirli bir sürümünü bağlıdır.

Her iki proje de güncellemek için karar verdiğinizde, sadece projectA projectB çekmek istemiyorumbunu oluşturmak gibi iki projenin toplam atom güncelleme ne olması gerektiği için tamamlar.
Bunun yerine,Bir tek projectA, projectB birleştiren tamamlama birleştirme ve benim yerel tamamlar yaratıyorum.
Zor kısım işte bu ahtapot birleştirme (üç başlı)ama projectB alt strateji ile birleştirilmiş olması gerekir. Bu ne demek:

# Merge projectA with the default strategy:
git merge projectA/master

# Merge projectB with the subtree strategy:
git merge -s subtree projectB/master

Burada yazar reset --hard read-tree ilk iki birleştirir çalışan ağaç ve dizin yaptıklarını geri yüklemek için kullanılan, ama neredereset --softyardımcı olabilir:
Nasıl ben bu iki birleştirir yenidenyani benim çalışma ağaç ve dizin güzel ama bu iki işleyen bir kayıt gerek kalmadan çalışmış olan?,

# Move the HEAD, and just the HEAD, two commits back!
git reset --soft HEAD@{2}

Şimdi, Tomas çözüm devam edebiliriz:

# Pretend that we just did an octopus merge with three heads:
echo $(git rev-parse projectA/master) > .git/MERGE_HEAD
echo $(git rev-parse projectB/master) >> .git/MERGE_HEAD

# And finally do the commit:
git commit

Yani, her zaman:

  • (çalışma ağaç ve dizin dönem) sonunda ne memnun
  • değilseni oraya götüren tüm tamamlar memnun:

git reset --soft cevap.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
Git

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DavidParody

    DavidParody

    17 EKİM 2009
  • KittiesMama

    KittiesMama

    10 AĞUSTOS 2008
  • The Platform

    The Platform

    14 HAZİRAN 2006