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
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
veprojectA
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 genellikleprojectA
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 tekprojectA
,projectB
birleştiren tamamlama birleştirme ve benim yerel tamamlar yaratıyorum.
Zor kısım işte bu ahtapot birleştirme (üç başlı)amaprojectB
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 --soft
yardı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.
Farklı veri yapıları pratik kullanır...
Atomicİnteger için pratik kullanır...
İçin pratik kullanır "iç" C ...
Reset otomatik artan isim sayacı...
&Quot vardır;yerleştirme yeni" kul...