Git: ระยะไกลเริ่มต้นที่กำหนดค่าไว้สำหรับสาขาคืออะไร


192

hubฉันมีพื้นที่เก็บข้อมูลระยะไกลเปลือย ฉันทำงานเฉพาะในmasterสาขา ประโยคสุดท้ายของข้อความแสดงข้อผิดพลาดด้านล่างทำให้ฉันสงสัย: ฉันจะหาได้อย่างไรว่า"รีโมทเริ่มต้นที่กำหนดค่าไว้สำหรับสาขาปัจจุบันของคุณ"คืออะไร และฉันจะตั้งได้อย่างไร

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.

คำตอบ:


230

ติดตามสาขาระยะไกล

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

แก้ไขของคุณ .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

ตอนนี้คุณสามารถคอมไพล์ดันและดึงคอมไพล์ได้แล้ว

[ แหล่งที่มา ]


สิ่งนี้จะไม่ถูกตั้งค่าถ้า OP ทำgit pull hub masterหรือไม่
Ryan Bigg

@ Ryan Bigg: ไม่อัตโนมัติหรือคุณมักจะพลาดการกำหนดค่าของคุณ
สะกิด

36
เหตุใดจึงต้องแก้ไขไฟล์กำหนดค่าเมื่อมีคำสั่ง git เนื่องจากเหตุผลนี้
urschrei

43
git branch --set-upstream local_branch remote / remote_branch (หรือเมื่อกดตามรายละเอียดด้านล่าง)
urschrei

25
@scragz: ไม่มีทาง! แนวทางคำสั่งรับประกันว่า. gitconfig ของคุณจะอยู่ในสถานะที่มีความหมาย
smci

260

คุณสามารถทำได้ง่ายขึ้นโดยรับรองว่าคุณ.gitconfigอยู่ในสถานะที่มีความหมาย:

ใช้ Git เวอร์ชัน v1.8.0 ขึ้นไป

git push -u hub master เมื่อผลักหรือ:
git branch -u hub/master

หรือ

(สิ่งนี้จะตั้งค่ารีโมตสำหรับสาขาที่เช็คเอาท์ในปัจจุบันเป็นhub/master)
git branch --set-upstream-to hub/master

หรือ

(ซึ่งจะตั้งระยะไกลสำหรับสาขาที่มีชื่อbranch_nameไปhub/master)
git branch branch_name --set-upstream-to hub/master

หากคุณกำลังใช้v1.7.xหรือก่อนหน้า

คุณต้องใช้--set-upstream:
git branch --set-upstream master hub/master


3
สำหรับทุกคนที่สงสัย: สามารถใช้คำสั่งที่สองสำหรับสาขาที่มีอยู่ได้
Eric Hu

1
@ eric-hu ตามรายละเอียดในคำตอบของฉันที่นี่: stackoverflow.com/questions/4878249/…
urschrei

1
set-upstream[-to]คำสั่งเปลี่ยนแปลงในปัจจุบันระยะไกลการกำหนดค่า โปสเตอร์ต้นฉบับถามเกี่ยวกับการกำหนดค่าเริ่มต้นระยะไกล แน่นอนว่ามันไม่ใช่แนวคิดเดียวกัน
Steve Pitchers

1
แต่ละสาขามีรีโมตที่ตั้งค่าไว้ในปัจจุบันระบุว่าสาขาใดบนรีโมตนั้นสอดคล้องกับสาขาโลคัล เริ่มต้นการกำหนดค่าระยะไกลกำหนดสาขาผลักหรือดึงถ้าคุณไม่ได้ระบุอย่างชัดเจนอย่างใดอย่างหนึ่ง คำตอบนี้ตั้งค่าปัจจุบันเท่านั้น คำตอบที่ได้รับการยอมรับ (แก้ไขด้วยมือ) นอกจากนี้ยังช่วยให้คุณสามารถตั้งค่าเริ่มต้นหนึ่ง ไม่มีใครรู้คำสั่งที่หลีกเลี่ยงการแก้ไขด้วยมือ?
Steve Pitchers

1
--set-upstream-toทำว่าการเปลี่ยนแปลงที่เหมือนกันใน.git/configฐานะ @scragz ข้อเสนอแนะในคำตอบของเขา
strah

26

เพื่อความสมบูรณ์: คำตอบก่อนหน้านี้บอกวิธีตั้งสาขาต้นน้ำ แต่ไม่ใช่วิธีดู

มีสองสามวิธีในการทำสิ่งนี้:

git branch -vvแสดงข้อมูลนั้นสำหรับทุกสาขา (จัดรูปแบบเป็นสีน้ำเงินในเทอร์มินัลส่วนใหญ่)

cat .git/config แสดงสิ่งนี้ด้วย

สำหรับการอ้างอิง:


-1

คำสั่งเพื่อรับ push remote ที่มีประสิทธิภาพสำหรับ branch เช่น master คือ:

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

นี่เป็นสาเหตุ (จากเอาต์พุต "man git config"):

branch.name.remote [... ] บอก git fetch และ git push ที่รีโมตเรียกจาก / push ไปที่ [... ] [for push] อาจถูกแทนที่ด้วยremote.pushDefault (สำหรับทุกสาขา) [และ] สำหรับ สาขาปัจจุบัน [.. ] ถูกแทนที่โดยbranch.name.pushRemote เพิ่มเติม [... ]

ด้วยเหตุผลบางอย่าง "man git push" จะบอกเฉพาะเกี่ยวกับ branch.name.remote (แม้ว่าจะมีลำดับความสำคัญน้อยที่สุดในสามข้อ) + กล่าวอย่างผิดพลาดว่าหากไม่ได้ตั้งค่าไว้ให้กดค่าเริ่มต้นเป็นแหล่งกำเนิด - ไม่ใช่เพียงแค่ เมื่อคุณโคลน repo branch.name.remote ถูกตั้งค่าเป็นจุดเริ่มต้น แต่ถ้าคุณลบการตั้งค่านี้การกด git จะล้มเหลวแม้ว่าคุณจะยังมีจุดเริ่มต้นของรีโมทอยู่ก็ตาม


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