İlk önce birleşmeden bir birleştirmeyi test etme


Yanıtlar:


133

Birleştirmeyi deneyene kadar ne olacağını simüle etmenin bir yolu olduğunu düşünmüyorum. Ancak, git statusbirleş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 --abortvb. İçin eklendi .)


4
@ Amber'ın cevabı, 'birleşmeyi nasıl simüle edeceğimize' sorulan soruya tam olarak cevap veriyor. --no-commitBence kullanmak çok daha kolay
samirahmed

14
@samirahmed: @Amber soruyu daha tam anlamıyla cevapladı, elbette, --no-commithala 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.
Mark Longair

2
Bunun git'in daha yeni bir sürümüne eklenip eklenmediğini bilmiyorum, ancak dokümanlarda (1.8.4) " mevcut olduğunda git merge --aborteşdeğerdir " ifadesi var , bu yüzden hatırlaması daha kolay olan :)git reset --mergeMERGE_HEAD
Samuel Meacham

@MamuelMeacham: bunu işaret ettiğiniz için teşekkürler - 1.7.4'te tanıtıldı. Cevabı bununla güncelledim. Teşekkürler!
Mark Longair

Bu öneri benim için hiçbir şey yapmadı, git 1.9.4.
djangofan

139

Kullanabilirsiniz git merge --no-commitBirleş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.


Bunun var olduğunu düşünmüyorum git merge --abort- belki de demek istiyorsun git reset --merge?
Mark Longair

Hayır, bunun aksine rebasebir --abortfor olmadığını fark ettim git merge.
Amber

7
Ben --no-ffde fırlatırım . Bir ff birleşmesinin oluşmasını engellemek için.
Andy

1
@ Andy's hızlı ileri değişiklikleri durdurmadığı için --no-ffburada hemen hemen zorunludur --no-commit.
jackr

1
@Anant Anand Gupta - bu iyi bir hile ama olmalı: git config --global alias.tm "birleştirme --no-commit --no-ff"
pasx

109

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.


4
Ayrıca git checkout --detachistediğ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).
Shayan Toqraee

Eğer topic_branch(ilk etapta bu soruya eğer muhtemelen olduğu gibi) büyük diff masterbir birleştirme çakışmasına neden oluyor eğer çıkış muhtemelen göz küresi sizin için çok büyüktür.
Crescent Fresh

Bunu kesinlikle çok seviyorum ... güvenli ve basit.
leo

4

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.


4

git merge --abortSon 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.


1
Yukarıda belirtilen diğer yöntemler nelerdir? Hepsi bahsediyor git merge --abort. Başvurduğunuz yanıtı kimin yazdığını belirterek cevabınızı gelecekte kanıtlamalısınız.
Michael Fulton


0

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:

Sourcetree'nin iki dal arasındaki farkı bilme özelliği

Ardından sourcetree, şubenizi temel şubeye birleştirirseniz birleştirilecek tüm değişiklikleri gösterecektir.

Sonuçlar

Tabii ki, size çatışmaları göstermeyecek, ancak birleşmelerde yararlı bir araçtır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.