git merge
İki dal, mevcut çalışma dalı ve kaptan arasında herhangi bir değişiklik yapmadan simüle etmenin herhangi bir yolu var mı ?
Yapmam gerektiğinde sık sık çatışma yaşıyorum git merge
. İlk olarak birleştirmeyi simüle etmenin bir yolu var mı?
git merge
İki dal, mevcut çalışma dalı ve kaptan arasında herhangi bir değişiklik yapmadan simüle etmenin herhangi bir yolu var mı ?
Yapmam gerektiğinde sık sık çatışma yaşıyorum git merge
. İlk olarak birleştirmeyi simüle etmenin bir yolu var mı?
Yanıtlar:
Birleştirmeyi deneyene kadar ne olacağını simüle etmenin bir yolu olduğunu düşünmüyorum. Ancak, git status
birleştirme işleminden önce çıktısının boş olduğundan emin olursanız, devam edip denemek oldukça güvenlidir. Çatışma yaşarsanız, daha önce bulunduğunuz duruma hemen geri dönebilirsiniz:
git reset --merge
Git 1.7.4'ten beri, birleştirme işlemini aşağıdakileri yaparak iptal edebilirsiniz:
git merge --abort
(Bu seçeneği ekleyen tamamlama mesajının açıkladığı gibi , bu, tutarlılık git rebase --abort
vb. İçin eklendi .)
--no-commit
Bence kullanmak çok daha kolay
--no-commit
hala dizini ve çalışma ağacını değiştiriyorsunuz, ancak tam olarak "herhangi bir değişiklik yapmadan" değil :) Benim fikrim, insanlar bu tür soru, genellikle bir birleştirmenin nasıl gideceğini görmenin en iyi yolunun sadece birleştirmeyi denemek olduğunu bilmedikleri için, daha önce bulundukları duruma geri dönmenin ne kadar kolay olduğunun farkında olmadıkları için eğer problemler ortaya çıktıysa.
git merge --abort
eşdeğerdir " ifadesi var , bu yüzden hatırlaması daha kolay olan :)git reset --merge
MERGE_HEAD
Kullanabilirsiniz git merge --no-commit
Birleştirme işleminin gerçekten yapılmasını önlemek için ve birleştirmenin nasıl çalıştığını sevmiyorsanız, yalnızca orijinal başlığa sıfırlayın.
Birleştirmeyi kesinleştirmek istemiyorsanız, hızlı bir şekilde ilerlemiş olsa bile (ve tanım gereği çatışmaları olmasa bile), ekleyebilirsiniz --no-ff
.
git merge --abort
- belki de demek istiyorsun git reset --merge
?
rebase
bir --abort
for olmadığını fark ettim git merge
.
--no-ff
de fırlatırım . Bir ff birleşmesinin oluşmasını engellemek için.
--no-ff
burada hemen hemen zorunludur --no-commit
.
Bir konu dalındaki değişiklikleri master yapmak için karşılaştırmak istersem, aşağıdakileri yapmanın en kolay ve en güvenli buluyorum:
git checkout master
git checkout -b trial_merge
git merge topic_branch
Birleştirme işlemini tamamladıktan sonra, ana verilerin konsolide değişikliğini görmek kolaydır
git diff master
Tamamlandığında, trial_merge dalını silin
git checkout master
git branch -D trial_merge
Bu şekilde ana dal asla değişmez.
git checkout --detach
istediğiniz her şeyi yapabilir ve test edebilirsiniz. Daha sonra, değişikliklerinizi saklamak istiyorsanız, yapın git checkout -b new_branch
. Ve değişikliklerinizi atmak istiyorsanız, istediğiniz şubeye göz atın ( git checkout master
).
topic_branch
(ilk etapta bu soruya eğer muhtemelen olduğu gibi) büyük diff master
bir birleştirme çakışmasına neden oluyor eğer çıkış muhtemelen göz küresi sizin için çok büyüktür.
Kullanırım :
git merge --ff-only
belgelere göre :
Geçerli HEAD zaten güncel değilse veya birleştirme bir hızlı ileri sarma olarak çözülmedikçe birleştirme ve sıfır dışında bir durumla çıkmayı reddetme.
Bu gerçekten bir simülasyon değil, çünkü iki dal arasında çatışma olmaması durumunda ileriye doğru bir birleşme olacak. Ancak ihtilaf durumunda bilgilendirilirsiniz ve hiçbir şey olmaz.
git merge --abort
Son zamanlarda kullanabildim . Ancak, bu yalnızca bir birleşme çatışması olduğunda kullanılabilir. Taahhüt etmek istemeyeceğinizden eminseniz, yukarıda belirtilen diğer yöntemleri kullanın.
git merge --abort
. Başvurduğunuz yanıtı kimin yazdığını belirterek cevabınızı gelecekte kanıtlamalısınız.
Neden sadece bir sapma dalı (git checkout -b) oluşturmuyorsunuz ve orada bir test birleştirmesi yapmıyorsunuz?
Sizin durumunuz olup olmadığını tam olarak bilmiyorum , ancak sorunuzun bazen bir özelliğe başladığımı, günler boyunca taahhütte bulunduğumu ve bunun üzerinde gelişmeyi birçok kez birleştirdiğimi hatırlayın.
Bu noktada tam olarak değiştirdiğim dosyalar üzerindeki kontrolü kaybettim ve sadece özelliğim kapandığında ve kodum geliştiğinde bunu bileceğim.
Bu durumda, hangi değişikliklerin (birleşmelerden başka değil) yaptığınızı bilmenin iyi bir yolu Sourcetree kullanıyor.
Temel daldaki sağ düğmeyi tıklamanız ve seçmeniz gerekir Diff Against Current
:
Ardından sourcetree, şubenizi temel şubeye birleştirirseniz birleştirilecek tüm değişiklikleri gösterecektir.
Tabii ki, size çatışmaları göstermeyecek, ancak birleşmelerde yararlı bir araçtır.