ข้อความแสดงข้อผิดพลาดที่สับสนจากคอมไพล์


97

ฉันได้รับข้อความนี้จาก Git:

คุณขอให้ดึงจาก 'ต้นทาง' ระยะไกล แต่ไม่ได้ระบุสาขา เนื่องจากนี่ไม่ใช่รีโมตที่กำหนดค่าเริ่มต้นสำหรับสาขาปัจจุบันของคุณคุณต้องระบุสาขาในบรรทัดคำสั่ง

ใครช่วยอธิบายหน่อย และที่สำคัญจะแก้ไขอย่างไร?

คำตอบ:


97

คุณต้องบอกคอมไพล์ว่าคุณต้องการดึงสาขาใดจาก repos ระยะไกล "ต้นทาง"

ฉันเดาว่าคุณต้องการสาขาเริ่มต้น (หลัก) ดังนั้นgit pull origin masterควรแก้ไขปัญหาของคุณ

ดูgit help branch, git help pullและgit help fetch สำหรับรายละเอียดเพิ่มเติม


2
เพื่อให้มันใช้งานได้ฉันต้องชำระเงินสาขา "หลัก" (ไม่มีสาขาที่เลือก) และดึงที่ช่วยแก้ปัญหา
cinek

@cinek: ใช่git pullดึงและรวมเข้ากับสาขาปัจจุบันดังนั้นพฤติกรรมของมันจึงขึ้นอยู่กับสาขาที่ถูกเช็คเอาต์และด้วย HEAD ที่แยกออกมา (ไม่มีการเช็คเอาท์สาขา) ไม่มีทางที่จะรู้ได้ว่าจะดึงสาขาใด
Cascabel

@cinek: ฉันคิดว่าคุณยังใหม่กับคอมไพล์ดังนั้นฉันยอมรับว่าคุณอยู่ในสถานะมาตรฐานโดยสิ้นเชิงกับหัวหน้าสาขาฉันไม่ดี :-)
p4bl0

88

ในการแก้ไขสมมติว่าคุณอยู่ในmasterสาขาและต้องการดึงmasterสาขาจากoriginระยะไกลใน Git เวอร์ชันใหม่ที่เพียงพอ (1.8 หรือใหม่กว่า):

git branch -u origin/master master

(แบบอะนาล็อกสำหรับสาขาอื่น ๆ และ / หรือรีโมท)

หากคุณสามารถรวมสิ่งนี้เข้ากับการผลักดันก็ยิ่งสั้นลง:

git push -u origin master

หลังจากนั้นธรรมดาgit pull/ git pushจะทำในสิ่งที่คุณคาดหวัง


ในซีรีส์ Git 1.7 git branchไม่มี-uสวิตช์ ( git pushทำเท่านั้น) และคุณต้องใช้สิ่งที่ยาวกว่านี้แทน--set-upstream:

git branch --set-upstream master origin/master

หมายเหตุ: -uการกลับรายการของการขัดแย้งเมื่อเทียบกับ ฉันคลำคำสั่งซื้อนี้มากกว่าหนึ่งครั้ง


ทั้งหมดนี้เป็นข้อสรุปสำหรับการทำสิ่งต่อไปนี้ซึ่งคุณยังสามารถทำได้อย่างชัดเจน:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

ก่อน 1.7 คุณต้องทำแบบนี้


ฉันคิดว่าคำสั่งที่อยู่ด้านบนสุด (อย่างน้อยก็ใน Git เวอร์ชันของฉัน) ตั้งค่าต้นน้ำของสาขาที่เรียกว่า "origin" เป็น "origin / master" ถ้าสาขาของคุณในพื้นที่เรียกว่า "master" ฉันคิดว่าคุณคงต้องการ:git branch --set-upstream master origin/master
Evan Donovan

ที่น่าสนใจ-uคือตัวเลือกนี้ไม่มีเอกสารgit branchในเวอร์ชัน 1.8.5.3 ของฉันทำให้เอกสารของคุณมีความสำคัญมากยิ่งขึ้น และตามที่คุณทราบตัวเลือกนี้ไม่สามารถใช้งานได้ในเวอร์ชัน 1.7 * เนื่องจาก-uย่อมา--set-upstreamจากคำสั่งของข้อโต้แย้งไม่ควรย้อนกลับอย่างที่คุณทำ--set-upstreamเนื่องจากความคิดเห็นของ @ EvanDonovan?
เตาปรุงอาหาร

อย่างไรก็ตามเมื่อฉันใช้คำสั่งที่คุณแสดง ( git branch -u origin/master master) มันทำงานตามที่คาดหวัง / ตั้งใจไว้สำหรับฉัน: "Branch master set up to track remote branch master from origin"
เตาปรุงอาหาร

1
@hobs: นั่นเป็นความวิปริตของ Git -uสวิทช์เป็นจริงไม่ได้เป็นรูปแบบสั้น --set-upstream--set-upstreamคำสั่งของการขัดแย้งเป็นสิ่งที่ตรงกันข้ามอย่างมีประสิทธิภาพจากเพื่อให้ ฉันคิดว่าในภายหลังมีการเปิดตัว--set-upstream-to(สังเกต "-to") ซึ่ง-uตอนนี้เป็นรูปแบบสั้น ๆ ของ
Aristotle Pagaltzis

ว้าว! สับสนแน่นอน ขอบคุณที่แก้ปัญหาให้ฉัน
เตา

3

ข้อความบอกว่ามันเกี่ยวกับอะไร สาขาปัจจุบันของคุณจะไม่เกี่ยวข้องกับ (ไม่ติดตาม) สาขาใด ๆ ในแหล่งกำเนิด คอมไพล์เลยไม่รู้จะดึงอะไร

จะทำอย่างไร? ขึ้นอยู่กับ ...

ในสถานการณ์ปกติส่วนใหญ่คุณกำลังดำเนินการxyzสาขาในพื้นที่ซึ่งแตกแขนงมาจากมาสเตอร์ซึ่งโคลนมาจากต้นแบบของแหล่งกำเนิด วิธีการปกติในการแก้ไขก็คือการเปลี่ยนไปใช้ต้นแบบและดึงการประสานกับแหล่งที่มาและจากนั้นกลับมาที่xyzrebase masterและ

แต่ในสถานการณ์ของคุณคุณอาจต้องการทำอย่างอื่น เราไม่สามารถทราบได้หากไม่ทราบรายละเอียดของสาขาและรีโมทของคุณและวิธีที่คุณต้องการใช้

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