การกำหนดค่าของคุณระบุที่จะรวมกับ <branch name> จากรีโมต แต่ไม่มีการดึงข้อมูลการอ้างอิงดังกล่าว


203

ฉันได้รับข้อผิดพลาดนี้เนื่องจากการดึง:

การกำหนดค่าของคุณระบุที่จะรวมกับ ref 'refs / heads / feature / Sprint4 / ABC-123-Branch' จากระยะไกล แต่ไม่มีการดึงข้อมูลอ้างอิงดังกล่าว

ข้อผิดพลาดนี้ไม่ได้มาสำหรับสาขาอื่น
สิ่งพิเศษเกี่ยวกับสาขานี้คือมันถูกสร้างขึ้นจากการกระทำก่อนหน้าของสาขาอื่น

ไฟล์ config ของฉันดูเหมือนว่า:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = <url here>
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "new-develop"]
    remote = origin
    merge = refs/heads/new-develop
[branch "feature/Sprint4/ABC-123-Branch"]
    remote = origin
    merge = refs/heads/feature/Sprint4/ABC-123-Branch

คุณสามารถแชร์คำสั่งที่คุณใช้ทำการผสานได้หรือไม่
dchayka

1
ปัญหานี้อาจเกิดขึ้นเมื่อลบสาขาระยะไกล ตรวจสอบอีกครั้งว่ามันมีอยู่จริง
Benny Neugebauer

4
ผู้อ่านในอนาคต: ถ้าคุณรู้ว่าสาขาระยะไกลมีอยู่ให้ตรวจสอบว่าคุณเพิกเฉยกรณีหรือไม่ ฉันตั้งค่าสาขาท้องถิ่นเพื่อติดตามสาขาระยะไกล แต่พิมพ์ชื่อรีโมตในตัวอักษรตัวพิมพ์เล็กทั้งหมด เพียงแค่ต้องกำหนดค่าท้องถิ่นใหม่เพื่อติดตาม Origin / BranchName แทน Origin / branchname
Jerreck

ฉันเพิ่งมีข้อผิดพลาดนี้และปัญหานั้นง่ายกว่าคำตอบด้านล่างฉันเสียการเชื่อมต่อ VPN ของฉัน ดังนั้นนี่คือข้อผิดพลาดที่คุณได้รับหาก git ไม่สามารถเข้าถึงเซิร์ฟเวอร์ต้นทางระยะไกลได้
Ben Thurley

เซิร์ฟเวอร์คอมไพล์ของฉันไม่ทำงาน นั่นคือสาเหตุ
dellasavia

คำตอบ:


150

นี่แปลว่าอะไร

ต้นน้ำที่ระยะไกลของคุณที่คุณเรียกoriginไม่มีอีกต่อไปได้หรืออาจจะไม่เคยมี (มันเป็นไปไม่ได้ที่จะบอกได้จากข้อมูลนี้เพียงอย่างเดียว) feature/Sprint4/ABC-123-Branchสาขาที่มีชื่อว่า มีสาเหตุหนึ่งที่พบได้ทั่วไปคือ: บางคน (อาจไม่ใช่คุณหรือคุณจำได้) ลบสาขาในที่เก็บ Git อื่น

สิ่งที่ต้องทำ

นี้ขึ้นอยู่กับสิ่งที่คุณต้องการ ดูหัวข้อสนทนาด้านล่าง คุณสามารถ:

  • สร้างหรือสร้างสาขาขึ้นใหม่บนรีโมทหรือ
  • ลบสาขาท้องถิ่นของคุณหรือ
  • อะไรก็ได้ที่คุณคิด

อภิปรายผล

คุณต้องใช้งานgit pull(หากคุณใช้งานอยู่git mergeคุณจะได้รับข้อความแสดงข้อผิดพลาดอื่นหรือไม่มีข้อความแสดงข้อผิดพลาดเลย)

เมื่อคุณใช้git fetchงาน Git ของคุณจะติดต่อ Git อื่นตามurlบรรทัดใน[remote "origin"]ส่วนของการกำหนดค่าของคุณ Git นั้นใช้คำสั่ง ( upload-pack) ซึ่งส่งรายการของ Git ของคุณไปยังสาขาอื่นทั้งหมด คุณสามารถใช้git ls-remoteเพื่อดูว่ามันทำงานอย่างไร (ลองใช้มันเป็นการศึกษา) นี่คือตัวอย่างของสิ่งที่ฉันได้รับเมื่อรันสิ่งนี้บนที่เก็บ Git gitด้วยตัวเอง:

$ git ls-remote origin
From [url]
bbc61680168542cf6fd3ae637bde395c73b76f0f    HEAD
60115f54bda3a127ed3cc8ffc6ab6c771cbceb1b    refs/heads/maint
bbc61680168542cf6fd3ae637bde395c73b76f0f    refs/heads/master
5ace31314f460db9aef2f1e2e1bd58016b1541f1    refs/heads/next
9e085c5399f8c1883cc8cdf175b107a4959d8fa6    refs/heads/pu
dd9985bd6dca5602cb461c4b4987466fa2f31638    refs/heads/todo
[snip]

refs/heads/รายการรายการทั้งหมดของสาขาที่มีอยู่ในระยะไกล, 1พร้อมกับที่สอดคล้องกันกระทำรหัส (สำหรับrefs/tags/รายการรหัสอาจชี้ไปที่แท็กวัตถุมากกว่าการกระทำ)

Git ของคุณใช้ชื่อสาขาเหล่านี้แล้วเปลี่ยนตามfetchบรรทัดในremoteส่วนเดียวกัน ในกรณีนี้ Git ของคุณแทนที่refs/heads/masterด้วยrefs/remotes/origin/masterตัวอย่างเช่น Git ของคุณทำสิ่งนี้ด้วยชื่อสาขาทุกสาขาที่เจอ

นอกจากนี้ยังบันทึกชื่อดั้งเดิมในไฟล์พิเศษFETCH_HEAD(คุณสามารถดูไฟล์นี้หากคุณมองเข้าไปใน.gitไดเรกทอรีของคุณเอง) ไฟล์นี้บันทึกชื่อและรหัสที่ดึงมา

git pullคำสั่งมีความหมายเป็นความสะดวกสบายตัดสั้น: มันจะทำงานgit fetchบนรีโมทเหมาะสมแล้วgit merge(หรือถ้ามีคำสั่งเช่นนั้นgit rebase) กับสิ่งที่ข้อโต้แย้งที่มีความจำเป็นที่จะผสาน (หรือ rebase) เป็นผู้กำกับโดย[branch ...]ส่วน ในกรณีนี้คุณ[branch "feature/Sprint4/ABC-123-Branch"]ส่วนกล่าวว่าสามารถดึงข้อมูลจากoriginนั้นผสานกับสิ่งที่ ID refs/heads/feature/Sprint4/ABC-123-Branchก็พบว่าภายใต้ชื่อ

เนื่องจากไม่มีสิ่งใดพบภายใต้ชื่อนั้นจึงgit pullบ่นและหยุด

หากคุณใช้ขั้นตอนนี้แยกเป็นสองขั้นตอนgit fetchจากนั้นgit merge(หรือgit rebase) Git ของคุณจะดูที่remotes/origin/สาขาการติดตามระยะไกลที่แคชไว้เพื่อดูว่าจะรวมหรือรีบูตอย่างไร หากมีเป็นสาขาเช่นที่ครั้งหนึ่งคุณอาจจะยังมีสาขาที่ห่างไกลการติดตาม ในกรณีนี้คุณจะไม่ได้รับข้อความแสดงข้อผิดพลาด ถ้าไม่เคยมีเช่นสาขาหรือถ้าคุณได้ทำงานgit fetchกับ--prune(ที่เอาตายสาขาระยะไกลติดตาม) เพื่อให้คุณจะมีความสอดคล้องกันสาขาที่ห่างไกลการติดตามคุณจะได้รับการร้องเรียน แต่มันจะหมายถึงการorigin/feature/Sprint4/ABC-123-Branchแทน

ในทั้งสองกรณีเราสามารถสรุปได้ว่าไม่ได้อยู่ในขณะนี้ในชื่อระยะไกลfeature/Sprint4/ABC-123-Branchorigin

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


1อย่างน้อยก็ต้องยอมรับทุกอย่าง แต่หากพวกเขาซ่อนการอ้างอิงบางรายการไว้


ขอบคุณที่อธิบายว่าคำสั่ง git pull ทำอะไรได้บ้าง ฉันสามารถแก้ไขปัญหาของฉันโดยเรียกใช้ git fetch แล้วรวม
fizch

11
หากต้องการลบการอ้างอิงสาขาระยะไกลที่ไม่มีอยู่ในที่เก็บในเครื่องของคุณให้ใช้git remote prune origin
Yoav

1
@ เบนยูริ: ใช่หรือวิ่งgit fetch --prune originหรือตั้งค่าfetch.pruneการtrueในการกำหนดค่าของคุณ (ทั้งสามมีความตั้งใจที่จะทำในสิ่งเดียวกันแม้ว่าในรุ่นไม่กี่ Git บางส่วนของเหล่านี้ไม่ได้มีความน่าเชื่อถือมาก)
torek

1
คุณจะต้องgit checkout <your remote branch>และทุกอย่างจะดี (ในบางกรณี)
Alexander Shtang

3
@JonathanBenn: คุณสามารถใช้เพื่อสลับการตั้งค่าสำหรับต้นน้ำในประเทศของคุณgit branch --set-upstream-to=origin/master master masterลบและสร้างมีว่าเป็นผลข้างเคียง (สมมติว่าคุณใช้ DWIM สไตล์git checkout masterในการสร้างมัน) กับผลข้างเคียงที่เพิ่มขึ้นของการบังคับให้คุณเพื่อให้ตรงกับของคุณmaster origin/master
torek

72

สิ่งนี้สามารถเกิดขึ้นได้หากคุณ / ใครบางคนเปลี่ยนชื่อสาขา ดังนั้นทำตามขั้นตอนเหล่านี้ (ถ้าคุณรู้ว่าชื่อสาขาถูกเปลี่ยนชื่อ) สมมติว่าชื่อสาขาก่อนหน้าเป็นwrong-branch-nameและมีคนเปลี่ยนชื่อเป็นcorrect-branch-nameดังนั้น

git checkout correct-branch-name

git pull (คุณจะเห็นข้อความนี้ "การกำหนดค่าของคุณระบุ .. ")

git branch --unset-upstream

git push --set-upstream origin correct-branch-name

git pull (คุณจะไม่ได้รับข้อความก่อนหน้านี้)


1
ไม่จำเป็นด้วยซ้ำgit pushและจะไม่ทำงานหากสาขาปัจจุบันอยู่หลังระยะไกล git pull origin correct-branch-nameก็เพียงพอแล้ว
Pierre

2
คำสั่งสำหรับตั้งค่า upstream ผิดด้านบน ทำ git pull หลังจาก - การดำเนินการที่ up-up ในผลลัพธ์ของ pull คุณสามารถดูข้อผิดพลาดได้โดยมีคำสั่งให้ตั้ง upstream เช่นด้านล่างสาขา git - set-upstream-to = origin / <branch > mybranch
Ankit Marothi

ทำงานได้ดีสำหรับฉันหลังจากลบไฟล์ขนาดใหญ่บางส่วนจาก repo ของฉันและต้องการที่จะผลักดันกลับไปที่ repo ใหม่ที่ฉันเพิ่งสร้างขึ้น
larrytech

40

ตรวจสอบว่าสาขาระยะไกลของคุณพร้อมที่จะดึงหรือไม่ ฉันมีปัญหาเดียวกันในที่สุดก็รู้ว่ามีใครบางคนลบสาขาจากระยะไกล


4
มันเหมือนกันสำหรับฉัน!
Aerin

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

นั่นเป็นความจริง :)
Malhaar Punjabi

7

สำหรับฉันมันเป็นปัญหาเรื่องความไว สาขาท้องถิ่นของฉันคือ Version_feature2 แทนที่จะเป็น Version_Feature2 ฉันตรวจสอบสาขาของฉันอีกครั้งโดยใช้เคสที่ถูกต้องแล้ว git pull ทำงาน


2
นี่กลายเป็นปัญหาของฉันเช่นกัน ไม่จำเป็นอย่างชัดเจนกับชื่อสาขาที่ค่อนข้างยาว / ซับซ้อน
Håkon K. Olafsen

6

สามารถรับข้อผิดพลาดนี้ได้เมื่อชื่อสาขาต้นทางมีปัญหาบางกรณี

ตัวอย่างเช่น: ต้นกำเนิดสาขาและสาขาในประเทศที่ได้รับการเช็คเอาต์เป็นteam1-Team team1-teamแล้วนี้Tใน-Teamและtใน-teamสามารถก่อให้เกิดข้อผิดพลาดดังกล่าว สิ่งนี้เกิดขึ้นในกรณีของฉัน ดังนั้นโดยการเปลี่ยนชื่อท้องถิ่นด้วยชื่อสาขาต้นกำเนิดข้อผิดพลาดได้รับการแก้ไข


6

ในกรณีของฉันฉันเพียงแค่ขาดความมุ่งมั่นเริ่มต้นในสาขาระยะไกลดังนั้นสาขาท้องถิ่นไม่พบอะไรที่จะดึงและมันก็ให้ข้อความผิดพลาดที่

ฉันทำ:

git commit -m 'first commit' // on remote branch
git pull // on local branch

4

ฉันได้รับข้อผิดพลาดที่คล้ายกันเมื่อสาเหตุที่แท้จริงคือดิสก์ของฉันเต็ม หลังจากลบไฟล์บางไฟล์git pullเริ่มทำงานตามที่คาดไว้


4

ฉันยังคงพบปัญหานี้ ในกรณีของฉันความคิดเห็นของ @ Jerreck เกี่ยวกับความแตกต่างของตัวอักษรในชื่อสาขาเป็นสาเหตุของข้อผิดพลาดนี้ เครื่องมือ Windows บางตัวไม่ทราบถึงความอ่อนตัวของตัวพิมพ์เล็ก

หากต้องการปิด case-sensitive ใน git ให้รันคำสั่งนี้:

git config --global core.ignorecase true

โปรดทราบว่าสิ่งนี้จะส่งผลกระทบมากกว่าชื่อสาขา ตัวอย่างเช่นหากคุณมี "Foo.h" และ "foo.h" ในไดเรกทอรีเดียวกัน (ไม่ใช่ความคิดที่ดีในการสร้างซอฟต์แวร์สำหรับ Windows) ฉันสงสัยว่าคุณไม่สามารถปิดความไวของตัวพิมพ์เล็กและตัวพิมพ์ใหญ่



1

ในกรณีของฉันฉันได้ลบสาขาเดิมที่สาขาปัจจุบันของฉันมาจาก ดังนั้นในไฟล์. git / config ฉันมี:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.0.5
    rebase = false

simil2.0.5 ถูกลบ ฉันแทนที่ด้วยชื่อสาขาเดียวกัน:

[branch "simil2.1.12"]
    remote = origin
    merge = refs/heads/simil2.1.12
    rebase = false

และมันก็ใช้งานได้


1

คุณสามารถเชื่อมโยงสาขาในพื้นที่ของคุณกับรีโมตสาขาได้ง่ายๆโดยการเรียกใช้:

git checkout <your-local-branch>
git branch --set-upstream-to=origin/<correct-remote-branch> <your-local-branch>
git pull

0

สำหรับฉันสิ่งนี้เกิดขึ้นเพราะฉันรวม dev dev สาขาลงในมาสเตอร์โดยใช้เว็บอินเตอร์เฟสแล้วลองซิงค์ / ดึงโดยใช้ VSCode ซึ่งเปิดบนกิ่ง dev (มันแปลกที่ฉันไม่สามารถเปลี่ยนเป็นมาสเตอร์โดยไม่มีข้อผิดพลาดนี้)

git pull
Your configuration specifies to merge with the ref 'refs/heads/dev'
from the remote, but no such ref was fetched.'

มันสมเหตุสมผลแล้วที่ไม่พบ refs / heads / dev - สำหรับฉันมันง่ายกว่าที่จะลบโฟลเดอร์โลคอลและโคลนอีกครั้ง


0

ฉันเพิ่งได้รับข้อผิดพลาดนี้เมื่อทำการ "git pull" เมื่อดิสก์ของฉันเต็ม สร้างที่ว่างและมันก็เริ่มทำงานได้ดีอีกครั้ง


0

คุณสามารถแก้ไข ~/.gitconfigไฟล์ในโฟลเดอร์บ้านของคุณ นี่คือที่บันทึกการตั้งค่า --global ทั้งหมด

หรือใช้git config --global --unset-all remote.origin.urlและหลังจากทำงานgit fetchด้วยที่เก็บ url


0

ฉันกำลังเผชิญปัญหาเดียวกันกับที่สาขาปัจจุบันของฉันเป็น dev และฉันก็เช็คเอาท์ที่สาขา MR และทำ git pull หลังจากนั้น วิธีแก้ปัญหาง่ายๆที่ฉันถ่ายคือฉันสร้างโฟลเดอร์ใหม่สำหรับ MR Branch และดึง git ที่นั่นแล้วตามด้วย git clone

ดังนั้นโดยทั่วไปฉันเก็บรักษาโฟลเดอร์ต่าง ๆ ไว้เพื่อผลักรหัสไปยังสาขาอื่น


0

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


-2

หากการดึงอีกครั้งใช้งานได้แสดงว่าอินเทอร์เน็ตของคุณไม่ได้เชื่อมต่อ


จำนวน downvotes และนี่คือสาเหตุที่ฉันได้รับข้อผิดพลาดนี้ ฉันมีอินเทอร์เน็ต แต่ได้สูญเสีย VPN ไปยังเซิร์ฟเวอร์คอมไพล์ของฉัน หลังจากเชื่อมต่อกับ VPN อีกครั้ง pull ทำงานได้ดี
Ben Thurley
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.