SORU
16 HAZİRAN 2010, ÇARŞAMBA


, 'yerel' ve 'uzaktan takip' git rebase;

Git rebase yaparak, sık sık zor oluyor ne çalışma var ne zaman 'yerli' ve 'uzak' çatışmaları çözerken. Bazen bir tarafın yanında taahhüt takas izlenim var.

Bu hala doğru anladım değil çünkü muhtemelen (kesinlikle).

Rebasing ne zaman, kim 'yerel' ve 'uzak'?

(Çatışmaları çözmek için P4Merge kullanıyorum)

CEVAP
16 HAZİRAN 2010, ÇARŞAMBA


TL;DR;

Bir rebase ours (rebase başlamadan önce mevcut şube) ve theirs (rebase istiyorsun üstüne ters yönde şube) geçer.
Ben iddia 'local mevcut şube' ve 'remote' Yukarı havza Şubesi.
Ama kutschkem işaret ederGUI mergetool bir bağlamda:

  • yerel kaynaklar kısmen rebased kaydeder: "ours" (Yukarı şube)
  • uzaktan gelen değişiklikleri ifade eder: "theirs" - rebase önce mevcut şube.

Bu cevap son bölümünde şekillere bakın.

Benubird commentsolarak:

Özetlemek gerekirse, ne zaman:

git checkout A
git rebase   B    # rebase A on top of B
  • local B,
  • remote A

Ters zaman rebase

Karışıklık inversion of ours and theirs during a rebase ilgili olabilir.
(ilgili özler)

54**:

Bir rebase her <upstream> dal üstünde çalışan şubesinden taahhüt tekrarlayarak çalışır birleştirmek unutmayın.

Bir birleştirme bu nedenle, çatışma olur:

  • yan olarak rapor '22* *' şimdiye kadar rebased serisi, <upstream> ile başlıyor
  • ve '24* *çalışma dalıdır. Diğer bir deyişle, taraf değiştirdi.

Yansıma resimli

Bir birleştirme

x--x--x--x--x(*) <- current branch B ('*'=HEAD)
    \
     \
      \--y--y--y <- other branch to merge

mevcut şube değişmeyiz 'B', çok (ve biz başka bir şube birleştirme) üzerinde çalışıyorduk hala

x--x--x--x--x---------o(*)  MERGE, still on branch B
    \       ^        /
     \     ours     /
      \            /
       --y--y--y--/  
               ^
              their

Rebase: bir

Amabir rebasebir rebase yaptığı ilk iş çıkış için yukarı şube çünkü! biz yan geçiş (mevcut üzerine tamamlar tekrar)

x--x--x--x--x(*) <- current branch B
    \
     \
      \--y--y--y <- upstream branch

Birgit rebase upstreamöncelikle üst Dalı HEAD B HEAD değişecek (dolayısıyla geçiş 'bizim' ve 'onların' önceki "" çalışma Dalı.) geçerli karşılaştırıldığında

x--x--x--x--x <- former "current" branch, new "theirs"
    \
     \
      \--y--y--y(*) <- upstream branch with B reset on it,  
                       new "ours", to replay x's on it

ve sonra rebase replay 'onların' yeni iptalleri '' B şube: . bizim

x--x..x..x..x <- old "theirs" commits, now "ghosts", available through reflogs
    \
     \
      \--y--y--y--x'--x'--x'(*) <-  branch B with HEAD updated ("ours")
               ^
               |
        upstream branch

"upstream" notion hangi veri okunan veri başvuru ayarlayın (her bir repo ya, sanki burada bir şube) veya hangi yeni veriler eklendi/oluşturulur. not:


'local' ve 'remote' vs 'mine' ve 'theirs'

Pandawood the comments ekler:

Benim için, sorun hala ortada, "yerel" ve "uzak" (şartlar "bizim" ve "onların" değil kullanıldığında rebasing gıt, yönlendiren, onları sadece yapmak gibi bir cevap daha kafa karıştırıcı).

GUI gıt mergetool

kutschkem ekler, ve haklı:

Çatışmaları çözerken, git " gibi bir şey söylerdi

local: modified file and remote: modified file. 

Soru bu noktada yerel ve uzaktan tanımı amaçlamaktadır eminim. Bu noktada, bu benim deneyim bana öyle geliyor ki

  • yerel kaynaklar kısmen rebased kaydeder: "ours" (Yukarı şube)
  • uzaktan gelen değişiklikleri ifade eder: "theirs" - rebase önce mevcut şube.

git mergetool nitekim söz yok 'yerel' ve 'uzak':

Merging:
f.txt

Normal merge conflict for 'f.txt':
  {local}: modified file
  {remote}: modified file
Hit return to start merge resolution tool (kdiff3):

Örneğin, KDiff3 60**:

kdiff3

meld 62**:

Meld diff

VimDiff, which displaysaynı:

-T gvimdiff gıt mergetool ile bir mergetool olarak Vimdiff çağırmak. Git yeni sürümleri Vimdiff aşağıdaki pencere düzeni ile çağırmak:

 -------------------------------- 
| LOCAL  |     BASE     | REMOTE |
 -------------------------------- 
|             MERGED             |
 -------------------------------- 
  • LOCAL:
    Geçici bir dosya mevcut şube üzerinde dosya içeriğini içeren.
  • BASE:
    Geçici bir dosya için ortak tabanı içeren birleştirme.
  • REMOTE:
    Birleştirilmek için bir geçici dosya dosya içeriğini içeren.
  • MERGED:
  • Dosya çakışması işaretleri içeren.

Git mümkün olduğu kadar otomatik bir uyuşmazlık Çözümü olarak yürüttü ve bu dosyanın devlet çatışma işaretleri Git Kendini çözülemedi her şey çevre ile LOCAL REMOTE her ikisinin bir kombinasyonudur.
mergetool bu dosya için çözüm sonucu yazsın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • echifitness

    echifitness

    9 Kasım 2008
  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • karneson

    karneson

    23 Temmuz 2006