TL; DR sürümü: uzaktan izleme dalı origin/mastermevcuttu, ancak şimdi yok, bu nedenle yerel şube sourcevar olmayan bir şeyi izliyor, bu da en iyi şüpheli - yani farklı bir Git özelliği sizin için hiçbir şey yapamıyor - ve Git sizi uyarıyor. "Yukarı akış izleme" özelliğinin amaçlandığı gibi çalışmasına gerek kalmadan iyi geçiniyorsunuz, bu nedenle herhangi bir şeyi değiştirip değiştirmemek size kalmış.
Yukarı akış ayarlarında başka bir alma için, bkz. Neden "git push --set-upstream orijin <branch>"?
Bu uyarı Git'te yeni bir şeydir, ilk önce Git 1.8.5'te görünür. Sürüm notları hakkında sadece bir kısa madde işareti içerir:
- "git branch -v -v" (ve "git status"), başka bir dalı temel almayan bir dal, yukarı akış dalıyla eşitlenen bir dal ve yukarı akışla yapılandırılmış bir dal arasında ayrım yapmadı artık var olmayan şube.
Bunun ne anlama geldiğini açıklamak için, önce "uzaktan kumandalar", "uzaktan izleme dalları" ve Git'in "yukarı akış takibini" nasıl ele aldığını bilmeniz gerekir. ( Uzaktan izleme dalları çok kusurlu bir terimdir - Bunun yerine uzaktan izleme adlarını kullanmaya başladım , bu da hafif bir gelişme olduğunu düşünüyorum.Ama aşağıda Git belgelerine tutarlılık için "uzaktan izleme dalı" kullanacağım. )
Her "uzak" kelimesi, bu durumda olduğu gibi originveya böyle bir addır octopress. Amaçları, sizin git fetchveya git pullgüncellediğiniz yerlerin tam URL'si gibi şeyleri kaydetmektir . 1'i kullandığınızda Git bu uzaktan kumandaya gider (kaydedilen URL'yi kullanarak) ve uygun güncelleme kümesini getirir. Ayrıca "uzaktan izleme dalları" kullanarak güncellemeleri kaydeder .git fetch remote,
Bir "uzaktan izleme kolu" (veya uzaktan izleme adı), bazı "uzak" cihazlarda son görüldüğü gibi bir şube adının kaydedilmesidir. Her uzaktan kumandanın kendisi bir Git deposudur, bu nedenle şubeleri vardır. Uzak "köken" üzerindeki şubeler altında yerel deponuza kaydedilir remotes/origin/. Eğer gösterdi metin orada adında bir dal olduğunu söylüyor sourceüzerinde originve dallar adında 2.1, linklogvb üzerinde octopress.
("Normal" veya "yerel" bir şube, elbette, yalnızca kendi deponuzda oluşturduğunuz bir şube adıdır.)
Son olarak, bir "uzaktan izleme dalını" "izlemek" için bir (yerel) dal ayarlayabilirsiniz. Yerel şube Luzaktan izleme kolunu izlemek üzere ayarlandığında R, Git R"yukarı akış" olarak adlandırılır ve yukarı akışta "ilerliyor" ve / veya "arkasında" olup olmadığınızı (taahhütler açısından) söyler. Bu var Normal (hatta tavsiye-muktedir) yerel şube ve (uzaktan önek kısmı hariç) aynı adı kullanmak dalları uzaktan izleme, benzerleri için sourceve origin/sourceaslında gerekli değil ama.
Ve bu durumda, bu gerçekleşmiyor. sourceUzaktan izleme kolunu izleyen yerel bir kolunuz var origin/master.
Git'in uzak bir şubeyi izlemek için nasıl yerel bir şube oluşturduğunun tam mekaniklerini bilmeniz gerekmiyor , ancak bunlar aşağıda alakalı, bu yüzden bunun nasıl çalıştığını göstereceğim. Yerel şube adınızla başlıyoruz source. Bu adı kullanan iki yapılandırma girişi vardır, yazılmıştır branch.source.remoteve branch.source.merge. Gösterdiğiniz çıktıdan, bunların her ikisinin de ayarlandığı açıktır, böylece verilen komutları çalıştırırsanız aşağıdakileri görürsünüz:
$ git config --get branch.source.remote
origin
$ git config --get branch.source.merge
refs/heads/master
Bunları bir araya getiren 2 , Git'e şubenizin source"uzaktan izleme şubenizi" izlediğini söyler origin/master.
Ancak şimdi git branch -adeponuzdaki tüm yerel ve uzaktan izleme şube adlarını gösteren çıktısına bakın . Uzaktan izleme adları remotes/... altında listelenir ve yokturremotes/origin/master . Muhtemelen bir zamanlar vardı, ama şimdi gitti.
Git, izleme bilgilerini kaldırabileceğinizi söylüyor --unset-upstream. Bu, hem dışarı temizler branch.source.originve branch.source.merge, ve uyarıyı durdurun.
İstediğin olsa da, olduğunu oldukça muhtemel görünüyor geçiş izlemeden gelen origin/masterbaşka bir şey izlemeye,: Muhtemelen origin/source, ama belki biri octopress/isimlerin.
Sen ile yapabilirsiniz git branch --set-upstream-to, 3 ör:
$ git branch --set-upstream-to=origin/source
(hala "kaynak" dalında olduğunuzu ve bu origin/sourceistediğiniz akış yukarı olduğunu varsayarsak - hangisinin, eğer varsa, gerçekten istediğinizi söylemem mümkün değil).
(Ayrıca bkz. Mevcut bir Git şubesini uzak bir şubeyi nasıl izlersiniz? )
Sanırım buraya gelme şekliniz, ilk yaptığınız zaman git clone, klonladığınız şeyin bir dalı olduğudur master. Ayrıca masterizlemek için ayarlanmış bir dalınız vardı origin/master(bu git için normal, standart bir kurulumdur). Bu olduğu anlamına geliyordu branch.master.remoteve branch.master.mergeset için originve refs/heads/master. Ama sonra originuzaktan kumandanız adını olarak masterdeğiştirdi source. Eşleştirmek için yerel adınızı olarak masterolarak değiştirdiğinize inanıyorum source. Bu değişti isimleri dışında, ayarlarınızı branch.master.remoteiçin branch.source.remoteve gelen branch.master.mergeetmek branch.source.merge... ama eski sol değerleri böylece, branch.source.mergeşimdi yanlıştı.
Bu noktada "yukarı akış" bağlantısı koptu, ancak 1.8.5'ten daha eski Git sürümlerinde Git, kırık ayarı hiç fark etmedi. Şimdi 1.8.5'iniz olduğuna göre, bunu gösteriyor.
Bu, soruların çoğunu kapsar, ancak "düzeltmem gerekiyor mu?" Muhtemelen yıllardır kırılganlık etrafında çalışıyorsunuz (ör .). Bunu yapmaya devam ederseniz, sorun üzerinde çalışmaya devam edecektir - bu yüzden hayır, düzeltmenize gerek yoktur . İsterseniz kullanabilirsiniz yukarı kaldırıp şikayetleri durdurmak ve yerel şube sahip değil sahip olarak işaretlenmiş herhangi hiç kaynak tarafı.git pull remote branchgit pull origin source--unset-upstreamsource
Bir yukarı akışa sahip olmanın amacı, çeşitli işlemleri daha kolay hale getirmektir. Örneğin, git fetchardından git mergeyukarı doğru ayarlanmış olup olmadığını genellikle "doğru olanı yapmak" olacak ve git statussonra git fetchsenin Repo o şube için, memba birini eşleşip söyleyecektir.
Kolaylığı istiyorsanız, yukarı akışı yeniden ayarlayın.
1git pull kullanır git fetchve Git 1.8.4'ten itibaren bu (son olarak!) "Uzaktan izleme dalı" bilgilerini de günceller. Git'in eski sürümlerinde, güncelleştirmeler git pullyalnızca ile uzaktan izleme dallarına kaydedilmedi git fetch. Git'inizin en az 1.8.5 sürümü olması gerektiğinden, bu sizin için bir sorun değildir.
2 Peki, bu artı altında bulunan kasıtlı olarak göz ardı ettiğim bir yapılandırma satırı remote.origin.fetch. Git, uzak dalın tam yerel adının olduğunu anlamak için "birleştirme" adını eşlemelidir refs/remotes/origin/master. Haritalama neredeyse her zaman böyle çalışır, bu yüzden masterdevam etmesi öngörülebilir origin/master.
3 Veya, ile git config. Eğer yukarı akış değiştirmek zorunda origin/sourceolan tek kısma ayarlamak istiyorsanız branch.source.merge, ve git config branch.source.merge refs/heads/source
bunu yapardı. Ancak bunu kendiniz yapmaktan ziyade ne yapmak istediğinizi --set-upstream-tosöylüyor , bu yüzden "daha iyi bir yol".