Git: ไม่เห็นสาขาระยะไกลใหม่


118

เพื่อนร่วมงานผลักดันสาขาระยะไกลใหม่ไปยังต้นทาง / dev / โฮมเพจและฉันไม่สามารถมองเห็นได้เมื่อเรียกใช้:

$ git branch -r

ฉันยังคงเห็นสาขาที่อยู่ห่างไกลมาก่อน

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


ปัญหาที่เกี่ยวข้อง - ไม่เห็นสาขาระยะไกล
RBT

1
ลืมไปgit pullแล้วขอบคุณ
JelenaČuklina

1
ในกรณีของฉันgit fetch <name-of-remote>ทำเคล็ดลับ หากไม่มีชื่อของรีโมทก็ใช้งานไม่ได้
Menno Deij - van Rijswijk

คำตอบ:


166

git ls-remote originขั้นแรกให้ตรวจสอบว่าสาขาที่ได้รับการผลักดันจริงจากระยะไกลโดยใช้คำสั่ง หากสาขาใหม่ปรากฏในเอาต์พุตให้ลองใช้คำสั่งgit fetch: ควรดาวน์โหลดการอ้างอิงสาขาจากที่เก็บระยะไกล

ถ้าสาขาที่ห่างไกลของคุณยังคงไม่ปรากฏดับเบิลเช็ค (ในls-remoteการส่งออก) refs/heads/สิ่งที่เป็นชื่อสาขาในระยะไกลและโดยเฉพาะถ้ามันเริ่มต้นด้วย เนื่องจากโดยค่าเริ่มต้นค่าของremote.<name>.fetchคือ:

+refs/heads/*:refs/remotes/origin/*

เพื่อให้เฉพาะการอ้างอิงระยะไกลที่มีชื่อขึ้นต้นด้วยrefs/heads/เท่านั้นที่จะถูกแมปภายในเป็นการอ้างอิงการติดตามระยะไกลภายใต้refs/remotes/origin/(กล่าวคือจะกลายเป็นสาขาการติดตามระยะไกล)


4
ฉันสามารถเห็น remote branch ใหม่หลังจากทำการ git fetch origin แล้ว แต่ไม่แน่ใจว่าความแตกต่างคืออะไรถ้าฉันเพิ่ง git ดึงข้อมูล? ฉันอ่านเกี่ยวกับการอัปเดตระยะไกลของ git แต่ไม่ชัดเจนว่าจะทำอย่างไร ฉันจะต้องเรียกใช้ git fetch สำหรับสาขาระยะไกลใหม่จากที่นี่หรือไม่
ไฮบริด 9

1
@ hybrid9 หากคุณใช้git fetchgit จะดาวน์โหลดข้อมูลอ้างอิงจากที่เก็บรีโมตเริ่มต้นที่ระบุไว้ใน.git/config: โดยปกติแล้วจะถูกเรียกoriginดังนั้นคำสั่งทั้งสองจึงเทียบเท่ากัน แต่การกำหนดค่าเฉพาะของคุณอาจแตกต่างกันด้วยเหตุผลบางประการ ไม่คุณไม่จำเป็นต้องให้git fetchทุกสาขาเนื่องจาก (โดยค่าเริ่มต้น) จะดึงข้อมูลสาขาทั้งหมด
Marco Leogrande

1
@ hybrid9 git pullเทียบเท่ากับgit fetch+ git merge(หรือgit rebaseถ้าคุณเปลี่ยนค่าเริ่มต้น) ดังนั้นคุณสามารถใช้งานได้git pullตามปกติและสาขาระยะไกลใหม่จะปรากฏขึ้นด้วยตัวเอง
Marco Leogrande

1
เดิมทีฉันใช้ git pull แต่ฉันไม่เคยเห็นสาขาระยะไกลใหม่ซึ่งทำให้ฉันสับสนจริงๆ จนกว่าฉันจะรัน git fetch origin เท่านั้น ฉันขอขอบคุณเวลาในการตอบคำถามของฉัน
ลูกผสม 9

2
@hybrid ฉันมีปัญหาเดียวกัน git ls-remote gerritrepo:projectแสดงสาขาระยะไกลใหม่ แต่git branch -aไม่ ... ฉันต้องทำการโคลนอีกครั้งและจากนั้นสาขาใหม่จะปรากฏขึ้น
Vikram

80

ตรวจสอบว่า.git/configมี

[remote "origin"]
    url = …
    fetch = +refs/heads/master:refs/remotes/origin/master

ถ้าเป็นเช่นนั้นให้เปลี่ยนเป็นพูด

[remote "origin"]
    url = …
    fetch = +refs/heads/*:refs/remotes/origin/*

จากนั้นคุณจะสามารถใช้งานได้:

$ git fetch
remote: Counting objects: …
remote: Compressing objects: ..
Unpacking objects: …
remote: …
From …
 * [new branch]            branchname -> origin/branchname
$ git checkout branchname
Branch branchname set up to track remote branch branchname from origin.
Switched to a new branch 'branchname'

12
สิ่งนี้เกิดขึ้นกับฉันหลังจากการโคลนตื้นครั้งแรก
ArkTekniK

เพอร์เฟ !!! ขอบคุณมาก! ที่เกิดขึ้นกับฉันเมื่อติดตั้ง Homebrew tap ที่กำหนดเองด้วยคำสั่งbrew tap user/repo: สำเนาในเครื่องของ repo ที่โคลนโดยbrewมีการตั้งค่าที่คุณกล่าวถึงและไม่สามารถดูและใช้สาขาอื่นที่ฉันมีใน repo ของฉันได้ ขอบคุณอีกครั้ง! :) +1!
rmbianchi

3
สามารถใช้คำสั่งต่อไปนี้แทนการแก้ไขไฟล์. git / configด้วยตนเอง git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"และจากนั้นgit fetch originจะได้รับทุกสาขาในแหล่งกำเนิด
dotnetCarpenter

นี่เป็นสิ่งที่ดี!
madz

47

คำตอบที่ง่ายที่สุดคือ:

git fetch origin <branch_name>


2
นี่เป็นเพียงสิ่งเดียวที่ใช้ได้ผลสำหรับฉัน
Theodore

3
มันไม่ได้ผลสำหรับฉัน ฉันได้รับข้อผิดพลาดนี้:fatal: Couldn't find remote ref <branch_name>
Parisa Khateri

3
ใช่มันได้ผลสำหรับฉันเช่นกันหลังจากการเช็คเอาต์คอมไพล์นี้ทำงานได้ดี !!
whoami

30

การอัปเดตระยะไกลของ gitจะอัปเดตรายการสาขาที่พร้อมใช้งานจากที่เก็บระยะไกล

หากคุณใช้ TortoiseGit ในเวอร์ชัน 1.8.3.0 คุณสามารถทำ "Git -> Sync" และจะมีปุ่ม "Remote Update" ที่ด้านล่างซ้ายของหน้าต่างที่ปรากฏขึ้น คลิกที่ จากนั้นคุณจะสามารถทำ "Git -> Switch / Checkout" และให้สาขาระยะไกลใหม่ปรากฏในเมนูแบบเลื่อนลงของสาขาที่คุณสามารถเลือกได้


18
git remote updategit fetchเป็นวิธีการแบบเก่าจะทำเช่นนี้คำสั่งที่ต้องการที่ใหม่กว่า

ใน TortoiseGit เวอร์ชันของฉัน (2.8.0.0) ปุ่มที่ด้านล่างซ้ายมีหลายตัวเลือกใต้ลูกศรและจะจำสิ่งที่คุณเลือกไว้ก่อนหน้านี้ ซึ่งหมายความว่าปุ่มอาจไม่ระบุว่า "Remote Update" หากคุณไม่เคยใช้มาก่อนจะมีข้อความว่า "ดึง" คลิกที่ลูกศรและคุณจะเห็น "การอัปเดตระยะไกล" ในรายการตัวเลือก
Michael Hinds

14

สมมติว่าเรากำลังค้นหาrelease / 1.0.5

เมื่อgit fetch -allใดที่ไม่ทำงานและคุณไม่สามารถมองเห็นสาขาระยะไกลและgit branch -rไม่แสดงสาขาเฉพาะนี้

1. พิมพ์อ้างอิงทั้งหมดจากระยะไกล (สาขา, แท็ก, ... ):

git ls-remote origin ควรแสดงสาขาระยะไกลที่คุณกำลังค้นหา

e51c80fc0e03abeb2379327d85ceca3ca7bc3ee5        refs/heads/fix/PROJECT-352
179b545ac9dab49f85cecb5aca0d85cec8fb152d        refs/heads/fix/PROJECT-5
e850a29846ee1ecc9561f7717205c5f2d78a992b        refs/heads/master
ab4539faa42777bf98fb8785cec654f46f858d2a        refs/heads/release/1.0.5
dee135fb65685cec287c99b9d195d92441a60c2d        refs/heads/release/1.0.4
36e385cec9b639560d1d8b093034ed16a402c855        refs/heads/release/1.0
d80c1a52012985cec2f191a660341d8b7dd91deb        refs/tags/v1.0

สาขาใหม่ 'release / 1.0.5' ปรากฏในเอาต์พุต

2. บังคับเรียกสาขาระยะไกล:

git fetch origin <name_branch>:<name_branch>

$ git fetch origin release/1.0.5:release/1.0.5

remote: Enumerating objects: 385, done.
remote: Counting objects: 100% (313/313), done.
remote: Compressing objects: 100% (160/160), done.

Receiving objects: 100% (231/231), 21.02 KiB | 1.05 MiB/s, done.
Resolving deltas: 100% (98/98), completed with 42 local objects.
From http://git.repo:8080/projects/projectX
 * [new branch]        release/1.0.5 -> release/1.0.5

ตอนนี้คุณมีการอ้างอิงในพื้นที่แล้วคุณชำระเงิน (หรืออะไรก็ได้) สาขานี้

งานเสร็จแล้ว!


1
คุณคือผู้ช่วยชีวิต :)
จักรี

# 2 คือสิ่งที่ฉันกำลังมองหา ขอบคุณ!
Matthew

4

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


Oooops! สิ่งที่ดี!
Marc


1

ในที่สุดสิ่งที่ได้ผลสำหรับฉันคือการเพิ่มชื่อที่เก็บระยะไกลให้กับgit fetchคำสั่งเช่นนี้:

git fetch core

ตอนนี้คุณสามารถเห็นทั้งหมดได้ดังนี้:

git branch --all

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