SORU
9 Mayıs 2012, ÇARŞAMBA


Güç "git push" uzak dosyaların üzerine yazmak

Benim yerel dosyalar itin ve uzak bir repo onları, birleştirme çakışmaları ile başa çıkmak zorunda kalmadan istiyorum. Ben sadece benim yerel versiyonu uzak bir önceliği var.

Nasıl Gıt ile bunu yapabilir miyim?

CEVAP
9 Mayıs 2012, ÇARŞAMBA


Kullanarak uzak repo yerel revizyon zorlamak gerekir

git push -f <remote> <branch>

(*örneğin 8*). <remote> <branch> bırakarak kapatmak tüm Şubeler itme kuvveti. --set-upstream.

Eğer diğer insanlar bu depo paylaşıyorsanız uyardı, revizyon geçmişi yeni bir çatışma olacak. Ve eğer değişim bu noktadan sonra herhangi bir yerel taahhüt varsa geçersiz hale gelecektir.

Güncelleme: Yan not. bir daha eklemek istiyorum düşündüm Eğer Diğerleri inceleyecek değişiklikler oluşturuyorsanız, o zaman nadir bu değişiklikler ile bir şube oluşturmak ve periyodik olarak güncelliğini onları ana geliştirme şube ile devam rebase için değil. Sadece diğer geliştiricilerin bu beklemek ne anlarlar bu yüzden düzenli aralıklarla gerçekleşir.

Güncelleme 2: İzleyici sayısının artması nedeniyle zaman upstream kuvvet bir itme deneyimi yok ne için bazı ek bilgiler eklemek istiyorum.

Repo klonlanmış ve bunun gibi bir kaç tamamlar ben eklemiş

            D----E  topic
           /
A----B----C         development

Ama daha sonra development bir şube ile bana bir hata git pull çalıştırdığımda: böyle almanıza neden olacak rebase, vurdu

Unpacking objects: 100% (3/3), done.
From <repo-location>
 * branch            development     -> FETCH_HEAD
Auto-merging <files>
CONFLICT (content): Merge conflict in <locations>
Automatic merge failed; fix conflicts and then commit the result.

Burada çatışmalar düzeltme ve 16 ** ama bu çok çirkin bir tarih taahhüt ile beni bırakır.

       C----D----E----F    topic
      /              /
A----B--------------C'  development

O telli ile başbaşa bırakayım çünkü git pull --force kullanın ama dikkatli olmak eder: cazip görünebilir

            D----E   topic

A----B----C'         development

Bu yüzden muhtemelen en iyi seçenektir git pull --rebase yapmak. Bu bana git rebase --continue kullanacağım işlemek yerine her adım için, ancak herhangi bir çatışma çözmek için gerektirir. Sonunda geçmişi çok daha iyi görünecektir işlemek:

            D'---E'  topic
           /
A----B----C'         development

Güncelleme 3:Ayrıca --force-with-lease seçeneğini kullanabilirsiniz "güvenli" kuvvet , 24**: push

Bir ile "kira" başarısız kuvvet itme varsa verir itme kuvveti yeni (teknik olarak, eğer beklemiyordun bu uzaktan tamamlar uzaktan izleme şube haline getirilen onları henüz görmediniz) eğer yanlışlıkla başkasının üzerine yazmak istiyor musun diye kullanışlıdır hakkında henüz bir şey bilmediğini ve sadece o tamamlar kendi üzerine yazmak:

git push <remote> <branch> --force-with-lease

Tarafından --force-with-lease kullanma hakkında daha fazla bilgi edinebilirsiniz aşağıdakilerden herhangi birini okuma

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • InfinityWard

    InfinityWard

    19 EYLÜL 2006
  • jbignacio

    jbignacio

    13 Mart 2006
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006