คุณขอให้ฉันดึงโดยไม่บอกฉันว่าคุณต้องการรวมกับสาขาใด


125

TL; DR: ฉันมีสาขา "ติดตาม" ที่ดึงไม่ได้

ดังนั้นฉันจึงอยู่ใน "bucket-4":

$ git branch -v
  bucket-1       410f7b5 * gh-53 * gh-48 * "Share App"
  bucket-2       7ed70a2 * upgrade to SOLR 3.3.0
  bucket-3       400ffe4 * emergency fix prod issue
* bucket-4       64c2414 Merge branch 'bucket-3' into bucket-4
  master         8dc4854 [ahead 1] * gh-73

ฉันต้องการดึงการเปลี่ยนแปลงจากรีโมทของฉัน:

$ git pull

You asked me to pull without telling me which branch you
want to merge with, and 'branch.bucket-4.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "bucket-4"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

อืมแปลกฉันคิดว่าฉันได้เพิ่ม "ที่เก็บข้อมูล -4" เป็นสาขาการติดตามแล้ว มาดูกัน:

$ git remote show origin
* remote origin
  Fetch URL: git@github.com:abcd/main.git
  Push  URL: git@github.com:abcd/main.git
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    bucket-3
    master
  Remote branches:
    bucket-1       tracked
    bucket-2       tracked
    bucket-3       tracked
    bucket-4       tracked
    master         tracked
  Local branches configured for 'git pull':
    bucket-1       merges with remote bucket-1
    bucket-2       merges with remote bucket-2
    bucket-3       merges with remote bucket-3
    master         merges with remote master
  Local refs configured for 'git push':
    bucket-1       pushes to bucket-1       (up to date)
    bucket-2       pushes to bucket-2       (up to date)
    bucket-3       pushes to bucket-3       (up to date)
    bucket-4       pushes to bucket-4       (local out of date)
    master         pushes to master         (fast-forwardable)

อันที่จริงที่เก็บข้อมูล -4 ถูกทำเครื่องหมายว่า "ติดตาม" แต่ก็มีการกำหนดค่าให้พุช แต่ไม่ดึง

เมื่อดู.git/configไฟล์ของฉันฉันเห็นว่าฉันมีรายการ "ระยะไกล" และ "รวม" สำหรับสาขาส่วนใหญ่ของฉัน แต่ไม่ใช่สำหรับที่เก็บข้อมูล -4 จะถือว่า "ติดตาม" ได้อย่างไรหากไม่มีสิ่งนี้

[remote "origin"]
    url = git@github.com:abcd/main.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "rel-2011-07-07"]
    remote = origin
    merge = refs/heads/rel-2011-07-07
[branch "bucket-1"]
    remote = origin
    merge = refs/heads/bucket-1
[branch "bucket-2"]
    remote = origin
    merge = refs/heads/bucket-2
[branch]
    autosetupmerge = true
[branch "bucket-3"]
    remote = origin
    merge = refs/heads/bucket-3

ฉันเห็นว่าทางออกที่เป็นไปได้ที่นี่คือการเพิ่มremote/mergeรายการสำหรับ bucket-4 ในไฟล์กำหนดค่าของฉัน แต่จะถือว่า "ติดตาม" ได้อย่างไรหากไม่มีสิ่งนี้? ที่เก็บข้อมูล -4 ถูกสร้างขึ้นในเครื่องจากนั้นส่งไปยังเซิร์ฟเวอร์จาก repo นี้ดังนั้นฉันจึงสงสัยว่าฉันไม่ได้ตั้งค่าการติดตามอย่างถูกต้องสำหรับสาขานี้

มีการกำหนดค่าบางอย่างที่ฉันสามารถเพิ่มเพื่อให้สาขาในพื้นที่ทั้งหมดติดตามรีโมทได้อย่างถูกต้องในอนาคตหรือไม่?


2
คำถามนี้ชี้ให้ฉันไปในทิศทางที่ถูกต้องฉันแค่ต้องเพิ่มรายการในไฟล์. git / config สำหรับสาขาที่ฉันพยายามดึงแล้วมันก็ใช้ได้ดี
Mr. Bungle

ใช่ฉันด้วยและวิธีการทำก็เป็นไปตามที่ Mark Longair อธิบายไว้ด้านล่างด้วย git branch --set-upstream bucket-4 origin / bucket-4
Jonathon Horsman

คำตอบ:


191

มันบอกว่าเป็นbucket-4 pushes to bucket-4เพียงเพราะค่าเริ่มต้นเมื่อผลักดันสาขาคือการผลักไปที่หนึ่งที่มีชื่อที่ตรงกันบนรีโมท (โปรดทราบว่านี่ยังคงเป็นค่าดีฟอลต์แม้ว่าสาขาภายในจะติดตามสาขาการติดตามระยะไกลและสาขาการติดตามระยะไกลจะสอดคล้องกับสาขาที่มีชื่อแตกต่างกันในที่เก็บระยะไกล)

วิธีที่ง่ายที่สุดในการตั้งค่าการเชื่อมโยงระหว่างคุณbucket-4และbucket-4ในoriginคือตรวจสอบให้แน่ใจว่าในครั้งต่อไปที่คุณผลักดันคุณจะต้อง:

git push -u origin bucket-4

หรือคุณสามารถทำได้:

git branch --set-upstream-to origin/bucket-4

หากต้องการตอบคำถามของคุณโดยตรง:

จะถือว่า "ติดตาม" ได้อย่างไรหากไม่มีสิ่งนี้

ในกรณีนี้ไม่ใช่ - จะไม่ติดตามสาขาการติดตามระยะไกลไม่ว่าในแง่ใดก็ตามหากไม่มีbranch.bucket-4.mergeหรือbranch.bucket-4.remoteในการกำหนดค่าคอมไพล์ของคุณ ผลลัพธ์จากgit remote show originเป็นเพียงการแสดงให้คุณเห็นว่าจะผลักสาขาไปที่ใดโดยค่าเริ่มต้น

มีการกำหนดค่าบางอย่างที่ฉันสามารถเพิ่มเพื่อให้สาขาในพื้นที่ทั้งหมดติดตามรีโมทได้อย่างถูกต้องในอนาคตหรือไม่?

ฉันไม่คิดว่าจะมี เมื่อคุณสร้างbucket-4ในเครื่องตามที่ฉันคิดว่าเกิดขึ้นไม่มีสาขาการติดตามระยะไกลดังนั้นจึงไม่สามารถตั้งค่าได้ในตอนนั้น - มันจะทำให้พฤติกรรมเริ่มต้นสับสนมาก คุณต้องอย่าลืมเพิ่มสาขา-uแรกของคุณgit pushในที่เก็บต้นน้ำ

ฉันหวังว่าจะช่วยได้บ้าง


7
git branch --set-upstreamทำงานได้อย่างสมบูรณ์แบบสำหรับฉันก่อนที่จะทำการดึง
ohaal

สาขา git - set-upstream bucket-4 origin / bucket-4 ทำงานให้ฉัน :-)
Aliza

ถ้าไม่อยากดันล่ะ? ฉันมีปัญหาเดียวกันนี้ แต่ฉันไม่ต้องการผลักดันจาก repo ที่ปัญหานี้เกิดขึ้น ฉันเพิ่งเปลี่ยนต้นกำเนิดจากระยะไกลและฉันต้องการดึง HEAD ล่าสุดสำหรับสาขาที่ดูเหมือนจะไม่มีการติดตามอีกต่อไป (แม้ว่าจะถูกติดตามก่อนที่ฉันจะเปลี่ยนต้นทางจากระยะไกล) ในที่สุดฉันก็ลบโคลนที่มีปัญหาและทำการโคลนใหม่จากจุดเริ่มต้นใหม่
geoidesic

1
อันที่จริงเมื่อพยายามgit --set-upstream <branch> origin/<branch>คุณจะได้รับข้อผิดพลาดเนื่องจากการตั้งค่าสถานะถูกเลิกใช้งาน ขอแนะนำให้ใช้git branch --track origin/<branch>หรือ--set-upstream-toเป็นคำตอบที่สองที่แนะนำ ฉันเดาว่าคำตอบสามารถอัปเดตได้ @MarkLongair?
AymDev

ขอบคุณสำหรับข้อเสนอแนะ @AymDev - ฉันได้ทำการเปลี่ยนแปลงแล้ว
Mark Longair

6

git branch --set-upstream <branch> origin/<branch> เลิกใช้งานแล้วอย่างน้อย 1.8.2.3 (เวอร์ชันของฉัน)

ใช้git branch --set-upstream-to=origin/<branch> <branch>แทน


2
หมายความว่าให้แสดงความคิดเห็นกับคำตอบของมาร์ค ? นอกจากนี้ยังได้รับการยกเลิกจริงในเวอร์ชัน 1.8.0
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.