SORU
20 HAZİRAN 2011, PAZARTESİ


Neden " 'geliştirmek/origin' şube uzaktan izleme geliştirmek" birleştirme mıyım?

Aşağıdaki iletiyi kaydeder yapan benim kuruluşta bir tek ben varım:

Birleştirme menşei/' geliştirmek . geliştirmek Dalı uzaktan izleme

Tabii bunları neden yaptığımı, ama durdurmak istiyorum.

Ne bu komutu işlemek ve üretmek için kullanmıyor olmam gereken doğru komut oluşturmanıza olanak veren ben miyim?

Teşekkürler
~J

CEVAP
20 HAZİRAN 2011, PAZARTESİ


git pull muhtemelen taahhüt yaratıyor. Başka biri depoyu kadar tamamlama iter sonra yerel bir taahhüt olun ve sonra da git pull çalıştırın, Git indir diğer geliştirici işlemek ve daha sonra yerel şube içine birleştirir.

Bu önlemek için gelecekte nasıl işliyor birleştirme

git pull --rebase gelecekte bunu önlemek için kullanabilirsiniz, ama rebasing riskleri vardır, ve I recommend avoiding pull altogether.

Bunun yerine, bu kullanım deseni takip etmenizi öneririm:

# download the latest commits
git remote update -p

# update the local branch
git merge --ff-only @{u}

# if the above fails with a complaint that the local branch has
# diverged:
git rebase -p @{u}

Açıklama

  • git remote update -p tüm depoları ve güncellemeler uzaktan uzaktan izleme Şubesi, *örneğin* 11) tamamlar indir. Çalışma dizini, dizin ya da yerel şubeleri dokunmaz.

    -p değişken silinmiş Yukarı dalları erik. Eğer foo Şubesi origin depo içinde silinir böylece git remote update -p otomatik origin/foo ilan no silecektir.

  • git merge --ff-only @{u} söyler Gıt birleştirme yönündeki Dalı (@{u} bağımsız değişken) yerel şube ama sadece sizin yerel şube olabilir "hızlı iletilen" için yukarı şube (başka bir deyişle, Eğer değil mi ayrıldı).

  • Yaptığınız tamamlar ama yine de saçma oluşturmak için ihtiyacını ortadan Yukarı şube, üst itti değil hareketleri birleştirme git rebase -p @{u} etkili önlemek için çalışıyoruz tamamlar. Bu gelişme, tarihin doğrusal, daha kolay inceleme yapma artırır.

    -p seçeneği Gıt birleştirir korumak için söyler. Bu rebased tamamlar linearizing çocuğuyum engeller. Bu, örneğin, master özelliği içine bir şube birleştirilmiş önemlidir. -p özellik dalda her tamamlama, market, süper git rebase tarafından yapılan bir parçası olarak master yineleniyor olmadan. Bu gelişme tarihini incelemek için daha zor değil, daha kolay olur.

    Dikkat edin: git rebase bunu yapmak için ne bekliyorsun olmayabilir, bu yüzden itmeden önce sonuçlarını gözden geçirin. Örneğin:

    git log --graph --oneline --decorate --date-order --color --boundary @{u}..
    

Aşağıdaki nedenlerle git pull --rebase bu yaklaşım tercih ederim:

  • Sizin geçmişinizi onları birleştirmek için Değiştir önce 69 ** sağlar.
  • Sağlar geçirmek -p (--preserve-merges) seçeneği git rebase durumda size ihtiyacımız rebase kasıtlı birleştirme (örneğin, birleştirme zaten itilmiş özelliği şube içine master).

Steno: git up yerine git pull

Kolay yukarıdaki yapmak için, up olarak adlandırılan: bir diğer ad oluşturma öneririm

git config --global alias.up '!git remote update -p; git merge --ff-only @{u}'

Güncel şube getirmek için şimdi yapmanız gereken tüm çalıştırmak için:

git up

yerine git pull. Eğer yerel şube memba şube gelişti çünkü bir hata alırsanız, o zaman size düşen rebase.

Neden git pull --rebase değil mi?

git pull --rebase koşu git fetch git rebase ardından koşmaya eşdeğerdir. Bu yeni memba taahhüt ileri için çalışır, ama eğer bu mümkün değilse o zaman yeni bir memba taahhüt üzerine yerel tamamlar rebase. Bu genellikle TAMAM, ama dikkatli olun:

  • Rebase ileri düzeyde bir konudur, ve rebasing önce riskleri anlamanız gerekir.
  • git pull --rebase onları birleştiren önce tamamlar incelemek için bir fırsat vermez. Bağlı olarak ne değişti memba, oldukça mümkün rebase yanlış çalışma—rebase --onto, merge, reset, ya push -f belki daha uygun daha sade rebase.
  • Değil (şimdilik) mümkün geçmek --preserve-merges rebase işlemi, herhangi bir kasıtlı birleştirme özelliği şube olacak lineerleştirilmiş, yeniden (ve böylece çoğaltma) özelliği şube tamamlar.

"Tamir" varolan bir birleştirme git pull tarafından oluşturulan işlemek

Eğer Henüz birleştirme git pull tarafından oluşturulan bir tamamlama itti sığınak değil birleştirme taahhüt rebase. Herhangi bir kasıtlı birleştirir (örneğin, birleştirme zaten itilmiş bir özellik mevcut şube şube) yapmadığınızı varsayarak, aşağıdaki işlemleri yapmalıdır:

git rebase @{u}

Yukarıdaki komut söyler Gıt tümünü seç olmayan birleştirme tamamlar ulaşılabilir HEAD (geçerli tamamlama), eksi tüm tamamlar ulaşılabilir @{u} (steno için "yukarı havza Şubesi", yani, origin/master HEAD master), replay (cherry-pick) onları üst memba şube, ve sonra hareket mevcut şube başvuru noktasına sonucu yeniden kaydeder. Olmayan birleştirme bu etkili hareket en son üzerine birleştirme ortadan kaldırır Yukarı işlemek git pull tarafından oluşturulan tamamlar.

Eğer birleştirme taahhüt kasıtlı varsa, diğer şubeden her şey tekrar olacak, çünkü git rebase @{u} çalıştırmak istemiyorum. Bu dava ile ilgili iyi git up kullanımı ve git pull tamamen önlemek için bu yüzden önemli ölçüde daha karmaşıktır. Muhtemelen reset pull tarafından oluşturulan birleştirme geri almak için kullanın ve git rebase -p @{u} yapın. -p tartışma git rebase olmadı güvenilir bir şekilde çalıştı benim için, bu yüzden olabilir olmam için kullanın. reset Geri Al kasıtlı birleştirme, güncelleme sizin yerel şube için @{u} ve sonra yeniden kasıtlı birleştirme (bir acı varsa orada bir sürü kıllı birleştirme çakışması).

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bobbylee Budde

    Bobbylee Bud

    13 ŞUBAT 2011
  • Caroline Martin

    Caroline Mar

    19 EYLÜL 2008
  • Simon Hayter

    Simon Hayter

    20 HAZİRAN 2010