เรียกในคอมไพล์ไม่ได้สาขาทั้งหมด


204

ฉันได้โคลนที่เก็บข้อมูลหลังจากที่มีคนสร้างสาขาใหม่ซึ่งฉันต้องการเริ่มทำงาน ฉันอ่านคู่มือและดูเหมือนว่าตายง่าย ๆ น่าแปลกที่มันไม่ทำงานและโพสต์ทั้งหมดที่ฉันพบแนะนำให้ฉันทำสิ่งที่ถูกต้อง ดังนั้นฉันจะอยู่ภายใต้การลงโทษเพราะจะต้องมีบางสิ่งบางอย่างที่ผิดปกติกับเรื่องนี้:

การกระทำที่ถูกต้องน่าจะเป็น

git fetch
git branch -a
* master
  remotes/origin/HEAD --> origin/master
  remotes/origin/master
git checkout -b dev-gml origin/dev-gml

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

$ mkdir ../gitest
$ cd ../gitest
$ git clone https://github.com/example/proj.git
Cloning into proj...
remote: Counting objects: 1155, done.
remote: Compressing objects: 100% (383/383), done.
remote: Total 1155 (delta 741), reused 1155 (delta 741)
Receiving objects: 100% (1155/1155), 477.22 KiB | 877 KiB/s, done.
Resolving deltas: 100% (741/741), done.
$ cd projdir
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/dev-gml
  remotes/origin/master

ฉันได้พยายามgit update, git pull, git fetch --all, git pretty-pleaseในพีชคณิตเป็นไปได้ทั้งหมด ...


45
สิ่งที่ไม่git config --get remote.origin.fetchผลิต? หากไม่เป็น+refs/heads/*:refs/remotes/origin/*เช่นนั้นก็น่าจะเป็น
torek

ใช่นั่นคือสิ่งที่มันผลิต
Edward Newell

3
ว่าปัญหาเดียวกัน แต่ความคิดเห็นข้างต้นแก้ไขได้! ฉันมี+refs/heads/master:refs/remotes/origin/masterกับmasterแทน*
เจาะ

1
ปัญหาเดียวกันสำหรับฉัน แต่ไม่มีข้อเสนอแนะในหน้านี้ที่แก้ไขได้ แปลก.
แมกนัส

1
@ thoni56: ใช่นี่น่าจะเป็นเพราะโคลนที่ตื้น
TrệnViệtHoàng

คำตอบ:


389

ปัญหาสามารถมองเห็นได้เมื่อตรวจสอบการremote.origin.fetchตั้งค่า
(บรรทัดที่ขึ้นต้นด้วย$bash จะแจ้งพร้อมกับคำสั่งที่ฉันพิมพ์บรรทัดอื่น ๆ เป็นผลลัพธ์ที่ส่งออก)

$ git config --get remote.origin.fetch
+refs/heads/master:refs/remotes/origin/master

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

$ git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
$ git config --get remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

สัญลักษณ์แทน *หมายถึงทุกสิ่งภายใต้เส้นทางนั้น

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


2
นี่อาจเป็นคำตอบที่ได้รับการยอมรับเนื่องจากสามารถแก้ไขปัญหาได้ในโพสต์ต้นฉบับ
LocalPCGuy

1
เพิ่งทราบด้านฉันต้องเพิ่ม--replace-allพารามิเตอร์เพื่อแทนที่ค่าทั้งหมดในการกำหนดค่าสำหรับของฉันremote.origin.fetch
Garis M Suero

4
โปรดทราบว่าสิ่งนี้อาจเกิดขึ้นได้หากคุณโคลนที่เก็บของคุณด้วยสาขาเดียวเท่านั้นเช่นgit clone <url> --branch <branch> --single-branch [<folder>]
Narretz

2
ตรวจสอบคำตอบของ stux
Newbee

5
สิ่งนี้อาจเกิดขึ้นเมื่อคุณโคลนด้วยgit clone ... --depth 1
Anatolii Bivol

113

ฉันมีปัญหานี้วันนี้ใน repo

มันไม่ได้เป็น+refs/heads/*:refs/remotes/origin/*ปัญหาตามวิธีการแก้ปัญหาด้านบน

อาการนั้นง่ายgit fetch originหรือgit fetchไม่ดูเหมือนว่าจะทำอะไรเลยแม้จะมีกิ่งที่อยู่ไกล ๆ

หลังจากลองหลายสิ่งหลายอย่างแล้วฉันก็ลบรีโมตต้นทางแล้วสร้างใหม่ ดูเหมือนว่าจะมีการแก้ไข ไม่รู้ทำไม

ลบด้วย: git remote rm origin

และสร้างใหม่ด้วย: git remote add origin <git uri>


14
ฉันมีการกำหนดค่าคอมไพล์ที่ถูกต้องสำหรับเช่นremote.origin.fetch +refs/heads/*:refs/remotes/origin/*ทางออกข้างต้นช่วยฉัน
Newbee

9
วิธีนี้เป็นวิธีที่ถูกต้องสำหรับฉันเช่นกัน สิ่งนี้โชคร้ายเนื่องจากมันระบุว่าอาจมีข้อผิดพลาดใน Git
Robert Oschler

2
นอกจากนี้ยังแก้ไขปัญหาของฉัน ฉันดูเหมือนจะมีปัญหานี้ในเครื่องที่มี git รุ่น 2.19.1v แต่ไม่ได้พบกับเครื่องอื่นด้วย git รุ่น 2.17.1
jerpint

6
git remote update originทำงานให้ฉัน ฉันคิดว่าจำเป็นต้องรีเฟรช
เฟลิเป้เจอราร์ด

3
git remote update originไม่ทำงานสำหรับฉัน แต่การลบและการเพิ่มรีโมตทำได้
Anatoliy Kmetyuk

59

อัปเดตระยะไกล

คุณต้องวิ่ง

git remote update

หรือ

git remote update <remote> 

จากนั้นคุณสามารถเรียกใช้git branch -rเพื่อแสดงรายการสาขาระยะไกล

ชำระเงินสาขาใหม่

วิธีติดตามสาขารีโมต (ใหม่) เป็นสาขาโลคัล:

git checkout -b <local branch> <remote>/<remote branch>

หรือ (บางครั้งไม่สามารถใช้งานได้หากไม่มีส่วนเสริมremotes/):

git checkout -b <local branch> remotes/<remote>/<remote branch>

สูตรโกง git ที่เป็นประโยชน์


5
แต่ปัญหาของฉันคือฉันไม่สามารถชำระเงินจากสาขาระยะไกลที่มีอยู่เพราะลูกค้า git ของฉันไม่คิดว่ามันมีอยู่ ดูคำถามของฉัน สังเกตว่าเมื่อฉันวิ่งgit fetchตามด้วยgit branch -aจะไม่แสดงสาขาทั้งหมด ฉันต้องลบไดเรกทอรีการทำงานของฉันและโคลนซ้ำเพื่อดูสาขาdev-gmlที่ผู้ทำงานร่วมกันทำ มันใช้งานได้ในเวลานี้ แต่เราจะแตกแขนงบ่อยครั้ง!
Edward Newell

เฮ้ @ เอ็ดเวิร์ดนีเวลล์ขอบคุณสำหรับคำตอบเพียงเพื่อให้คุณรู้ว่าลิงค์ของคุณ cheat.errtheblog.com/s/gitตายสำหรับฉัน ...
Kjellski

เป็นเวลานานแล้วที่ฉันถามคำถามนี้เป็นครั้งแรกและฉันเพิ่งส่ง Ping ไปเพราะมีคนโพสต์อีกครั้ง ฉันยอมรับคำตอบนี้แม้ว่าจริงๆแล้วฉันจะไม่ได้ผลอะไรเลย เหตุผลที่ฉันทำเครื่องหมายถูกต้องในที่สุดก็เพราะฉันสงสัยว่าสิ่งที่เขาเขียนข้างๆEdit:ๆ อาจทำงานได้ดี มันเป็นสิ่งที่ฉันจะลองถ้าฉันยังคงประสบปัญหา HTH
Edward Newell

git remote update originสำหรับบันทึกที่บิตที่ช่วยให้ฉันที่นี่คือ git branch -l -rที่ทำให้สาขาที่ขาดหายไปมองเห็นได้ผ่านทาง (ฉันได้ดูgit config --get remote.origin.fetchและผลลัพธ์ก็+refs/heads/*:refs/remotes/origin/*เป็นไปตามที่คาดไว้)
Robert Dodier

9

เขียนจากเทอร์มินัล

git fetch --prune.

มันใช้งานได้ดี


1
ขอบคุณ! ฉันพยายามหลายสิ่งหลายอย่างและคิดว่าฉันจะให้นัดนี้ ... ตอนนี้เพื่อค้นหาสิ่งที่ฉันทำจริง ๆ ...
MadTurki

มันทำอะไร?
Adam Orlov

มันใช้เวลาสาขาที่มีอยู่ทั้งหมด ดูที่หัว
Samet ÖZTOPRAK

4

เพื่อให้เฉพาะเจาะจงมากขึ้นสร้างสาขาการติดตามซึ่งหมายความว่าคุณกำลังติดตามสาขาระยะไกล

git branch --track branch remote-branch
git branch --track exp remotes/origin/experimental

หลังจากนั้นคุณสามารถ

git branch   # to see the remote tracking branch "exp" created .

จากนั้นก็ไปทำงานในสาขานั้นกันเลย

git checkout branchname
git checkout exp

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

git fetch origin
git merge origin/experimental  
git push origin/experimental

หวังว่ามันจะช่วยและช่วยให้คุณมีความคิดวิธีการทำงาน


1

ฉันมีปัญหาที่คล้ายกัน แต่ในกรณีของฉันฉันสามารถดึง / ผลักดันไปยังสาขาระยะไกล แต่git statusไม่ได้แสดงสถานะสาขาท้องถิ่นที่ wrt ระยะไกล

นอกจากนี้ในกรณีของฉันgit config --get remote.origin.fetchไม่ได้ส่งคืนสิ่งใด

ปัญหาคือว่ามีการพิมพ์ผิดใน .git/configไฟล์ในบรรทัดการดึงข้อมูลของบล็อกระยะไกลที่เกี่ยวข้อง ก่อนหน้านี้อาจมีบางอย่างที่ฉันเพิ่มโดยไม่ได้ตั้งใจ (บางครั้งฉันดูไฟล์นี้โดยตรงหรือแก้ไข)

ดังนั้นตรวจสอบว่ารายการรีโมตของคุณใน.git/configไฟล์นั้นถูกต้องเช่น:

[remote "origin"]
    url = https://[server]/[user or organization]/[repo].git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

อาจเป็นเพราะช่วงเวลาที่ใช้ฝ่ามือ: ถ้าคุณสลับไปมาระหว่างโคลนหลาย ๆ ต้นคุณจะพบว่าตัวเองอยู่ในต้นไม้ต้นกำเนิดที่พยายามดึงกิ่งที่ไม่มีอยู่ มันง่ายกว่าเมื่อโคลนมีชื่อคล้ายกันหรือ repos เป็นโคลนที่แตกต่างกันสำหรับโครงการเดียวกันจากผู้มีส่วนร่วมหลายคน โคลนคอมไพล์ใหม่จะดูเหมือนชัดเจนว่า "ปัญหา" นั้นเมื่อปัญหาที่แท้จริงคือการสูญเสียโฟกัสหรือบริบทการทำงานหรือทั้งสองอย่าง


0

ฉันต้องเข้าไปที่ที่เก็บข้อมูลระยะไกลของ GitExtensions เพราะไม่มีอะไรที่นี่ดูเหมือนจะทำงานได้ ฉันเห็นว่ามี 2 สาขาที่ไม่ได้กำหนดค่าที่เก็บระยะไกล หลังจากปรับแล้วจะมีลักษณะดังนี้ป้อนคำอธิบายรูปภาพที่นี่

สาขาประกาศnoExternal3ยังคงแสดงให้เห็นว่าไม่มีที่เก็บระยะไกล ไม่แน่ใจว่าคำสั่งผสมของคำสั่ง bash จะพบหรือปรับเปลี่ยนอะไร


0

มีปัญหาเดียวกันวันนี้ตั้งค่า repo ของฉันจากศูนย์ ฉันลองทุกอย่างไม่มีอะไรทำงานยกเว้นลบต้นกำเนิดและเพิ่มอีกครั้งอีกครั้ง

git remote rm origin
git remote add origin git@github.com:web3coach/the-blockchain-bar-newsletter-edition.git

git fetch --all
// Ta daaa all branches fetched

-1

เรามีปัญหาเดียวกันและคุณต้องใช้

git fetch

git push origin branch_name

git branch -r

หวังว่าสิ่งนี้จะช่วยให้บางคนประสบปัญหาเดียวกัน

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