Git checkout: การอัพเดทพา ธ ไม่สามารถใช้งานได้กับการสลับแบรนช์


467

ปัญหาของฉันเป็นที่เกี่ยวข้องกับข้อผิดพลาดร้ายแรง Git เมื่อมีการเปลี่ยนสาขา

ฉันพยายามดึงสาขาระยะไกลด้วยคำสั่ง

git checkout -b local-name origin/remote-name

แต่ฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

ร้ายแรง: เช็คเอาต์ git: การอัพเดทพา ธ ไม่สามารถใช้งานได้กับการสลับแบรนช์
คุณตั้งใจจะเช็คเอาต์ 'Origin / remote-name' ซึ่งไม่สามารถแก้ไขได้ตามที่มอบหมาย?

ถ้าฉันสร้างสาขาด้วยตนเองแล้วดึงสาขาระยะไกลมันใช้งานได้เช่นเดียวกับการสร้างโคลนใหม่และตรวจสอบสาขา

เหตุใดมันจึงไม่ทำงานบนที่เก็บที่ฉันทำงานด้วย


1
มีการเปลี่ยนแปลงอะไรตั้งแต่อินสแตนซ์แรกของคำสั่งนั้น (เรียกใช้ข้อความแสดงข้อผิดพลาด)
VonC

git init git fetch git fetch git: //blabla.com/dir1/Project.git

คำตอบ:


739

ฉันเชื่อว่าสิ่งนี้เกิดขึ้นเมื่อคุณพยายามเช็คเอาต์สาขาระยะไกลซึ่ง repo git ในพื้นที่ของคุณยังไม่ทราบ ลอง:

git remote show origin

หากสาขาระยะไกลที่คุณต้องการชำระเงินอยู่ภายใต้ "สาขาระยะไกลใหม่" และไม่ใช่ "สาขาระยะไกลที่ติดตาม" คุณต้องดึงข้อมูลสาขาเหล่านั้นก่อน:

git remote update
git fetch

ตอนนี้มันควรจะทำงาน:

git checkout -b local-name origin/remote-name

7
สิ่งนี้แก้ปัญหาให้ฉันได้ไม่ใช่คำตอบตามอำเภอใจข้างต้น
Jessedc

21
นั่นควรจะเป็น "git fetch REPOSITORY_NAME" เพื่อรับทุกสาขาในที่เก็บนั้น
Mike Thomsen

1
ไม่จำเป็น. git fetchจะได้รับสาขาทั้งหมดจาก repos ระยะไกลทั้งหมด
Michael Grinich

4
ในกรณีที่คนอื่นดิ้นรนกับความบ้าคลั่งที่สุดของทั้งหมดนี้: git fetch origin / branchname ไม่เหมือนกับ git fetch ผลลัพธ์ในอดีตจะเป็นแบบ "ใหม่ (การดึงข้อมูลครั้งต่อไปจะเก็บไว้ในรีโมท / แหล่งกำเนิด)" แสดงในคอลัมน์ที่มองเห็นได้ผ่านทางต้นกำเนิดการแสดงระยะไกล Git
Alexander Kellett

7
หากคุณพยายามทำสิ่งนี้สำหรับรีโมตที่คุณเพิ่มไว้อย่างชัดเจน (ดังนั้นสิ่งอื่นที่ไม่ใช่ต้นกำเนิด ) คุณจะต้องทำgit remote updateก่อนการดึงข้อมูลของคุณจะดึงรีโมตนั้น มิฉะนั้นคุณจะได้รับข้อความเช่นDid you intend to checkout 'upstream-repo/master' which can not be resolved as commit?โปรดเพิ่มสิ่งนี้ลงในคำตอบและประหยัดเวลาในการอ่านคำตอบเดียวกันกับที่ใช้กับแหล่งกำเนิดได้
Bruno Bronosky

150

ไวยากรณ์สำรอง

git fetch origin remote_branch_name:local_branch_name

12
สิ่งนี้ใช้ได้สำหรับฉัน ชื่อสาขาระยะไกลของฉันไม่ได้กำเนิด ฉันไม่รู้ว่ามันสร้างความแตกต่างได้หรือไม่ถ้าฉันดื่มวอดก้า
Rimian

13
นี่ไม่ใช่แค่ไวยากรณ์ทางเลือก แต่สามารถทำงานได้เมื่อ git checkout -b branch_name origin / branch_name ไม่ทำงาน
codercake

1
สิ่งนี้ยังแก้ไขปัญหาของฉันเมื่อเรียกใช้ "git checkout - track กำเนิด / remote-branch" ซึ่ง แต่เดิมให้ข้อผิดพลาดเดียวกับ OP ก่อนการแก้ไข ขอบคุณ!
kakyo

1
ทำงานให้ฉันหลังจากใช้คำตอบที่ตรวจสอบแล้ว
AsTeR

2
ใช่ฉันสงสัยว่า--depthคุณสมบัติของโคลนดั้งเดิมอาจเป็นความผิดที่นี่ ฉันประสบความสำเร็จด้วยgit fetch remote_branch_name:local_branch_nameแต่คำแนะนำอื่น ๆ ทั้งหมดล้มเหลว
John Kelleher

46

หลังจากลองสิ่งที่ฉันสามารถอ่านได้ในกระทู้นี้โดยไม่ประสบความสำเร็จฉันก็เจอสิ่งนี้: สาขาระยะไกลไม่ปรากฏใน "git branch -r"

ปรากฏว่าไฟล์. git / config ของฉันไม่ถูกต้อง หลังจากทำการแก้ไขอย่างง่ายทุกสาขาปรากฏตัวขึ้น

ไปจาก

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

ถึง

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

ทำเคล็ดลับ


4
แน่นอนว่าเป็นการกำหนดค่าที่แปลก มันบอกคอมไพล์ที่จะดึงสาขาหลักจากระยะไกล
Ikke

3
ฉันจะลงคะแนนให้ 10 ครั้งถ้าทำได้! - สิ่งนี้ดูเหมือนจะเป็นสิ่งที่คอมไพล์ใหม่ทำเมื่อโคลน
mpapis

2
ฉันมีปัญหาเดียวกันมันทำให้ฉันเป็นบ้า ทุกคนที่ไม่เห็นสาขาระยะไกลโปรดตรวจสอบสิ่งนี้ !!
Carlos Granados

ขอบคุณพระเจ้าสำหรับคำตอบของคุณ :)
Sacha

ใจ = พัด! ขอบคุณ!
Chiranjib

12

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

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch

11

ไม่ได้ผลสำหรับฉัน สถานการณ์ของฉันคือแตกต่างกันเล็กน้อยสาขาที่ห่างไกลของฉันไม่ได้อยู่ที่แหล่งกำเนิด แต่ในที่เก็บอื่น

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

คำแนะนำ: หากคุณไม่เห็นสาขาระยะไกลในผลลัพธ์ต่อไปนี้git branch -v -aจะไม่มีวิธีตรวจสอบ

ยืนยันการทำงานกับ 1.7.5.4


arf เพิ่งรู้ VirtualStaticVoid มีวิธีแก้ปัญหาเดียวกัน!
Olivier Refalo

+1 สำหรับgit branch -v -a: ผมมีความไม่ถูกต้องกำหนดค่าระยะไกลที่กล่าวว่าแม้ว่าระยะไกลที่เรียกว่าfetch = +refs/heads/*:refs/remotes/master/* upstream
keflavich

7

สำหรับฉันสิ่งที่ทำงานคือ:

git fetch

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

git checkout <branchname>

และนั่นทำงานได้อย่างสมบูรณ์ คล้ายกับคำตอบที่ได้รับการโหวตมากที่สุด แต่ทำได้ง่ายกว่าเล็กน้อย


4

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

เป็นไปได้ไหมที่คุณพิมพ์บางจุด:

ต้นกำเนิดสาขา git / ชื่อระยะไกล

ดังนั้นการสร้างสาขาท้องถิ่นชื่อกำเนิด / ชื่อระยะไกล? พิมพ์คำสั่งนี้:

git checkout กำเนิด / ชื่อระยะไกล

คุณจะเห็น:

เปลี่ยนเป็นสาขา "ต้นกำเนิด / ชื่อระยะไกล"

ซึ่งหมายความว่ามันเป็นสาขาท้องถิ่นที่ผิดชื่อหรือ

หมายเหตุ: การย้ายไปที่ "ต้นทาง / การทำงานซ้ำ - การออก" ซึ่งไม่ใช่สาขาในพื้นที่
หากคุณต้องการสร้างสาขาใหม่จากการชำระเงินนี้คุณสามารถทำได้
(ตอนนี้หรือภายหลัง) โดยใช้ -b พร้อมกับคำสั่ง checkout อีกครั้ง ตัวอย่าง:
  git checkout -b 

ซึ่งหมายความว่าเป็นสาขาระยะไกลจริงๆ


3

มันไม่ได้ใช้งานง่าย แต่มันใช้งานได้ดีสำหรับฉัน ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

จากนั้นเรียกใช้คำสั่ง git branch --track ...

  git branch --track $BRANCH origin/$BRANCH

2

สำหรับฉันฉันพิมพ์ผิดและไม่มีสาขาระยะไกลของฉัน

ใช้git branch -aเพื่อแสดงรายการสาขาระยะไกล


1

สามารถแก้ไขปัญหาของคุณได้รับการเชื่อมโยงกับคำถามนี้ SO อื่น ๆปัญหา "เช็คเอาต์" ?

เช่น: ปัญหาที่เกี่ยวข้องกับ:

  • Git รุ่นเก่า
  • ไวยากรณ์เช็คเอาต์อยากรู้อยากเห็นซึ่งควรจะเป็น: git checkout -b [<new_branch>] [<start_point>]โดย [<start_point>]อ้างถึงชื่อของการกระทำที่จะเริ่มสาขาใหม่และ'origin/remote-name'ไม่ว่า
    (ในขณะที่git branchรองรับ start_point เป็นชื่อของสาขาระยะไกล)

หมายเหตุ: สิ่งที่สคริปต์ checkout.shพูดคือ:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

มันเหมือนไวยากรณ์ git checkout -b [] [remote_branch_name] ทั้งสองเปลี่ยนชื่อสาขาและรีเซ็ตจุดเริ่มต้นใหม่ของสาขาใหม่ซึ่งถือว่าไม่เข้ากัน


ปัญหาได้รับการแก้ไขแล้ว คอมไพล์เช็คเอาท์ -b ท้องถิ่นชื่อระยะไกล / ระยะไกลสาขาทำงานจริง
Ikke

1
น่าสนใจมีการเปลี่ยนแปลงอะไรบ้างนับตั้งแต่อินสแตนซ์แรกของคำสั่งนั้น (เรียกใช้ข้อความแสดงข้อผิดพลาด)
VonC

1

หลังจากดึง zillion ครั้งยังคงเพิ่มรีโมทไม่ปรากฏขึ้นแม้ว่า blobs อยู่ในสระว่ายน้ำ เปลี่ยนเป็นตัวเลือก - แท็กไม่ควรให้git remote addด้วยเหตุผลใดก็ตาม คุณสามารถลบออกจาก. git / config ด้วยตนเองเพื่อให้ git fetch สร้าง refs

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