SORU
9 Temmuz 2010, Cuma


Birleştirme, güncelleme ve kullanıma alma kullanmadan dalları Çek Git

Ben 2 Şubesi olan bir proje üzerinde çalışmak, A ve B ben tipik Bir şube üzerinde çalışmak ve birleştirmek İçin şube B şeyleri birleştirme, genellikle yaparım:

git merge origin/branchB

Ancak, aynı zamanda şube B yerel bir kopyasını tutmak istiyorum, bazen ilk bu şube benim A. ile birleştirme olmadan Dalı kontrol gibi yapardım:

git checkout branchB
git pull
git checkout branchA

Bir yol şube ileri ve geri geçiş yapmak zorunda kalmadan tek bir komuta ve yukarıdaki yapmak var mı? Bunun için git update-ref kullanarak olmalıdır? Nasıl?

CEVAP
18 Temmuz 2013, PERŞEMBE


Kısa Cevap

Bir yaptığın sürece-hızlı ileribirleştirme, sonra sadece kullanabilirsiniz

git fetch <remote> <sourceBranch>:<destinationBranch>

Örnekler:

# Merge local branch foo into local branch master,
# without having to checkout master first.
# Here `.` means to use the local repository as the "remote":
git fetch . foo:master

# Merge remote branch origin/foo into local branch foo,
# without having to checkout foo first:
git fetch origin foo:foo

Amber's answer de çalışır hızlı ileri durumlarda kullanarak git fetch Bu yol yerine biraz daha güvenli sadece kuvvet şube hareket referans, beri git fetch otomatik olarak önlemek, kaza sonucu olmayan hızlı ileri olarak kullanmayın refspec.

Uzun Cevap

Eğer bir yol olsaydı Bir ilk kontrol-hızlı ileri sarma sigara birleştirme olmadan Bir şube bir şube B birleştirme yapamazsınız. Bu çalışma bir kopyasını herhangi bir potansiyel çatışmaları çözmek için gerekli olmasıdır.

Ancak-hızlı ileri birleştirmesi durumunda, bu mümkündürböyle samimi asla çatışmalara neden olabilir , çünkü, tanımı. Bir şube kontrol etmeden bunu yapmak için, bir refspec git fetch kullanabilirsiniz.

Buradaysa feature kontrol dışında başka bir şube varsa master (non-hızlı ileri değişiklikler izin vermeme) güncellenmesi için bir örnek:

git fetch upstream master:master

Bu kullanım vakası muhtemelen bunun gibi gıt yapılandırma dosyası için bir ad yapmak isteyeceksiniz o kadar yaygındır:

[alias]
    sync = !sh -c 'git checkout --quiet HEAD; git fetch upstream master:master; git checkout --quiet -'

Bu diğer yaptığı şey şudur:

  1. git checkout HEAD: bu kafa müstakil bir devlet haline çalışma kopyası koyar. Bu kontrol için ne ise master güncellemek isterseniz faydalıdır. Aksi takdirde master şube başvuru hareket etmiyor çünkü gerekli olduğunu düşünüyorum, ama eğer gerçekten kafamın üstü kapalı haklıysa hatırlamıyorum.

  2. git fetch upstream master:master: origin/master master aynı yerde yerel ileri hızlı bu.

  3. git checkout - sizin daha önce teslim şube (- bu durumda ne yapar) denetler.

(Olmayan)hızlı ileri sarmak için git fetch sözdizimi birleştirir

Eğer varsa güncelleme-hızlı ileri sarma sigara ise fetch komutu başarısız olmak istiyorsanız, o zaman sadece form refspec kullanın

git fetch <remote> <remoteBranch>:<localBranch>

Eğer non-hızlı ileri güncelleştirmeleri izin vermek istiyorsanız, o zaman refspec önüne ekleyin:

git fetch <remote>  <remoteBranch>:<localBranch>

"" Parametresini kullanan .: . uzak olarak yerel repo iletebilirsiniz unutmayın

git fetch . <sourceBranch>:<destinationBranch>

Belgeleri

git fetch documentation that explains this syntax (vurgu benim): gelen

<refspec>

Biçimi <refspec> parametre isteğe bağlı artı ardından kaynak ref <src>, ardından bir kolon :, ardından hedef ilan no <dst>.

<src> eşleşen uzaktan ref getirilen, ve eğer <dst> boş bir dize ise, eşleşen yerel ref hızlı biçimde ileri <src> kullanıyor. Eğer isteğe bağlı artı kullanılıyorsa, yerel hakem eğer ileri bir güncelleme olarak değilse bile güncellenir.

Ayrıca Bkz

  1. Git checkout and merge without touching working tree

  2. Merging without changing the working directory

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bethliebert

    bethliebert

    23 EKİM 2008
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • movies95

    movies95

    27 Kasım 2006