TL; DR sürümü: uzaktan izleme dalı origin/master
mevcuttu, ancak şimdi yok, bu nedenle yerel şube source
var 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 origin
veya böyle bir addır octopress
. Amaçları, sizin git fetch
veya git pull
gü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 origin
ve dallar adında 2.1
, linklog
vb ü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 L
uzaktan 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 source
ve origin/source
aslında gerekli değil ama.
Ve bu durumda, bu gerçekleşmiyor. source
Uzaktan 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.remote
ve 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 -a
deponuzdaki 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.origin
ve 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/master
baş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/source
istediğ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 master
izlemek 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.remote
ve branch.master.merge
set için origin
ve refs/heads/master
. Ama sonra origin
uzaktan kumandanız adını olarak master
değiştirdi source
. Eşleştirmek için yerel adınızı olarak master
olarak değiştirdiğinize inanıyorum source
. Bu değişti isimleri dışında, ayarlarınızı branch.master.remote
için branch.source.remote
ve gelen branch.master.merge
etmek 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 branch
git pull origin source
--unset-upstream
source
Bir yukarı akışa sahip olmanın amacı, çeşitli işlemleri daha kolay hale getirmektir. Örneğin, git fetch
ardından git merge
yukarı doğru ayarlanmış olup olmadığını genellikle "doğru olanı yapmak" olacak ve git status
sonra git fetch
senin 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 fetch
ve 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 pull
yalnı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 master
devam etmesi öngörülebilir origin/master
.
3 Veya, ile git config
. Eğer yukarı akış değiştirmek zorunda origin/source
olan 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-to
söylüyor , bu yüzden "daha iyi bir yol".