ไม่สามารถส่งไปยังสาขาระยะไกลไม่สามารถแก้ไขเป็นสาขาได้


110

ฉันย้าย repos ของฉันจาก Bitbucket หรือ Github ฉันไม่คิดว่าเรื่องนี้สำคัญ แต่สิ่งเดียวที่แตกต่างออกไป ... ในขณะที่ฉันตั้งค่ารีโมทสองตัว:

origin: bitbucket
github: github

จากนั้นฉันก็ลบต้นกำเนิดทั้งสองและชี้ไปที่ github:

git remote remove origin
git remote remove github
git remote add origin https://github....

ทดสอบผลักดันสาขาการพัฒนา:

git push origin develop

ทุกอย่างทันสมัยโอเคดี

สร้างสาขาใหม่สำหรับงานบางอย่างตามปกติ:

git checkout -b Feature/Name

อัปเดตไฟล์หรือสองไฟล์ พยายามกดไปที่รีโมต:

git push origin Feature/Name

ส่งผลให้เกิดข้อผิดพลาด:

ถึงแก่ชีวิต: ไม่สามารถแก้ไขคุณลักษณะ / ชื่อเป็นสาขาได้

ค้นหาปัญหานี้ทางออนไลน์ค้นหาข้อมูลบางอย่างเกี่ยวกับการตรวจสอบว่า HEAD ถูกต้องและอื่น ๆ เกี่ยวกับการตรวจสอบว่าฉันมีกรณีชื่อสาขาของฉันถูกต้อง (แม้ว่า ณ จุดนี้สาขายังไม่มีอยู่บนรีโมท) ไม่สามารถแก้ไขได้

รันคำสั่งนี้:

git push --all -u

สิ่งนี้ทำให้Feature/Nameสาขาของฉันไปที่ github แต่ยังคงเห็นพฤติกรรมเหมือนเดิม:

git push origin develop
git push origin Feature/Name

ผลงานแรกที่สองแสดงข้อผิดพลาดเดียวกัน

ฉันคิดไม่ออกว่าทำไมฉันถึงได้รับข้อผิดพลาดนี้ ความคิดใด ๆ ?


1
สิ่งที่สาขาเป็นคุณเมื่อคุณทำFeature/Name? คุณแน่ใจหรือไม่ว่า Feature/Nameมีอยู่และที่ตรวจสอบออกสาขา? ตรวจสอบด้วยgit branch.
Schwern

@Schwern - มีเพียงสามสาขา (ในพื้นที่และระยะไกล): พัฒนาทดสอบและเชี่ยวชาญ เมื่อสาขาถูกล้างและรวมกลับเพื่อพัฒนาฉันจะลบออกในเครื่อง (และจากระยะไกลถ้ามี) ฉันแน่ใจว่ามีเพียงสามคนของฉันฉันไม่ได้เปิดโครงการมาสักพักแล้วสิ่งแรกที่ฉันทำคือตรวจสอบและตรวจสอบให้แน่ใจว่าฉันไม่มีกิ่งก้านสาขาหลวม
jleach

หมายความว่าคุณเรียกใช้git branchเพื่อยืนยันว่าFeature/Nameมีอยู่ในเครื่องใช่หรือไม่ อย่าเชื่อ GUI หรือ IDE นอกจากนี้คุณได้รับกรณีใช่หรือไม่?
Schwern

แล้วไงgit push origin Feature/Name:Feature/Name?
ElpieKay

ตอนนี้ฉันโกรธ ... ไม่แน่ใจว่าทำไมมันถึงใช้ไม่ได้ตั้งแต่แรก แต่หลังจากใช้git push --all -uฉันมีสาขาใหม่ใน github แต่ยังไม่สามารถผลักดันจากท้องถิ่นได้ใช่ไหม? นี่คือสิ่งที่เกิดขึ้นกับว่า ... ชื่อสาขาที่เกิดขึ้นจริงSQLMigration/ReportFixesและสิ่งที่อยู่ใน GitHub SqlMigration/ReportFixesเป็น ตอนนี้ฉันทำได้แล้วgit push origin SqlMigration/ReportFixes- whytf github เปลี่ยนปลอกให้ฉันหรือไม่ อ๊าก.
jleach

คำตอบ:


380

ฉันก็ประสบปัญหานี้เช่นกันและมันทำให้ฉันแทบคลั่ง ฉันมีสิ่งที่ชอบfeature/nameแต่แสดงให้ฉันเห็นgit branch -a FEATURE/nameเปลี่ยนชื่อสาขาลบและสร้างใหม่ไม่มีอะไรทำงาน สิ่งที่แก้ไขได้ในที่สุด:

เข้าไปใน .git/refs/heads

คุณจะเห็นFEATUREโฟลเดอร์ เปลี่ยนชื่อเป็นfeature.


4
นี่เป็นคำตอบที่ถูกต้องสำหรับฉัน กำลังใช้ gitbash บน windows และได้สร้าง feature / some-feature และ Feature / some-feature
Dylan McCurry

ควรทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้อง ช่วยฉันออกไป ขอบคุณ!
GuiDoody

21
ฉันเป็นหนี้คุณเบียร์สำหรับคำตอบนี้! : D
Vojta

1
ว้าวน่าจับจัง ช่วยฉันได้มากตลอดเวลา ขอบคุณ!
Piyush

2
@Pegues - เสร็จแล้ว ฉันไม่คิดว่าคำตอบนี้จะมีอยู่นานหลังจากที่ฉันมีปัญหา แต่ดูเหมือนว่าจะเป็นที่นิยมดังนั้นไปเลย
jleach

30

จากการทดสอบของฉันเองและความคิดเห็นของ OPฉันคิดว่าในบางครั้งพวกเขาก็เข้าใจผิดกับชื่อสาขา

อันดับแรกฉันเชื่อว่า OP อยู่ในระบบปฏิบัติการที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่เช่น OS X หรือ Windows แล้วพวกเขาก็ทำอะไรแบบนี้ ...

$ git checkout -b SQLMigration/ReportFixes
Switched to a new branch 'SQLMigration/ReportFixes'

$ git push origin SqlMigration/ReportFixes
fatal: SqlMigration/ReportFixes cannot be resolved to branch.

สังเกตความแตกต่างของปลอก นอกจากนี้โปรดทราบว่าข้อผิดพลาดแตกต่างอย่างมากจากกรณีที่คุณพิมพ์ชื่อผิด

$ git push origin SQLMigration/ReportFixme
error: src refspec SQLMigration/ReportFixme does not match any.
error: failed to push some refs to 'git@github.com:schwern/testing123.git'

เพราะ Github .git/refs/heads/SqlMigration/ReportFixesใช้ระบบแฟ้มจัดเก็บชื่อสาขาก็พยายามที่จะเปิด เนื่องจากระบบไฟล์ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่จึงเปิด.git/refs/heads/SqlMigration/ReportFixesได้สำเร็จแต่จะสับสนเมื่อพยายามเปรียบเทียบชื่อสาขาตามตัวพิมพ์เล็กและใหญ่และไม่ตรงกัน

พวกเขาเข้าสู่สถานะที่สาขาในพื้นที่อยู่ได้อย่างไรSQLMigration/ReportFixesและสาขาห่างไกลนั้นSqlMigration/ReportFixesฉันไม่แน่ใจ ฉันไม่เชื่อว่า Github ยุ่งกับชื่อสาขาระยะไกล คำอธิบายที่ง่ายที่สุดคือคนอื่นที่มีการเข้าถึงแบบพุชเปลี่ยนชื่อสาขาระยะไกล มิฉะนั้นในบางครั้งพวกเขาได้ทำบางสิ่งบางอย่างที่สามารถสร้างรีโมตด้วยการพิมพ์ผิด หากพวกเขาตรวจสอบประวัติเชลล์บางทีhistory | grep -i sqlmigration/reportfixesพวกเขาอาจสามารถค้นหาคำสั่งที่พิมพ์ปลอกผิดได้


ฉันพบปัญหานี้เมื่อฉันเปลี่ยนกรณีของอักขระในชื่อสาขาบน OS X การเปลี่ยนกลับช่วยแก้ปัญหาได้
Steven C. Howell

นอกจากนี้ยังสามารถเกิดขึ้นได้เมื่อคุณมีสาขาก่อนหน้าเช่น AM-xxx / some_branch จากนั้นสร้างอีกสาขาหนึ่ง AM-XXX / another_branch คอมไพล์จะอนุญาตกรณีที่แตกต่างกันในเครื่องและไม่สามารถจับคู่ทั้งสองจากระยะไกลได้
timpwbaker

ใช่มันเป็นไปได้ที่จะตรวจสอบในกรณีที่ไม่ถูกต้อง แต่ไม่ได้เช็คอิน .. ยุ่ง
javadba

12

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

เพิ่งค้นพบวิธีที่ยาก


1
นี่คือปัญหาของฉัน ฉันขอแนะนำให้ดำเนินการอย่างรวดเร็ว> git branchและตรวจสอบว่าสาขาของคุณมีเครื่องหมาย * อยู่ข้างๆ
Andy Danger Gagne

สิ่งนี้เกิดขึ้นกับฉันเช่นกัน @AndyDangerGagne ฉันดีใจที่คุณแนะนำสิ่งนี้ - ไม่มี * ถัดจากสาขาที่ฉันอยู่ดังนั้นฉันจึงตรวจสอบอีกครั้งคราวนี้เป็นตัวพิมพ์เล็ก
Cognitiaclaeves

9

สิ่งที่คล้ายกันเกิดขึ้นกับฉัน ฉันสร้างสาขาที่เรียกว่า "Feat / name" ฉันพยายามผลักดันโดยใช้:

git push --set-upstream origin Feat / name

ฉันได้รับข้อผิดพลาดร้ายแรงเช่นเดียวกับคุณ:

ร้ายแรง: ไม่สามารถแก้ไข Feat / name เป็น branch ได้

เพื่อแก้ปัญหานี้ฉันได้สร้างสาขาใหม่เนื่องจากฉันมีไฟล์น้อยมากที่ได้รับผลกระทบ จากนั้นฉันระบุสาขาของฉันเพื่อลบสาขาที่ไม่ถูกต้องและแสดงโดยไม่มีฝาปิด:

  • feat / ชื่อ

ฉันเคยใช้แคปมาก่อน แต่ไม่เคยใช้คาแรกเตอร์ ดูเหมือนคอมไพล์จะไม่ชอบ ...


เคยเจอเหมือนกัน THX: D
abdoutelb

5

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

ตัวอย่าง:

git checkout -b "TASK-135-hello-world"

วิธีทำผิด :

git push origin task-135-hello-world     #FATAL: task-135-hello-world cannot be resolved to branch

วิธีทำที่ถูกต้อง :

git push origin TASK-135-hello-world

2

บางทีคุณอาจลืมเรียกใช้ git fetch? จำเป็นต้องดึงข้อมูลจาก repo ระยะไกล! ลองวิ่งgit fetch remote/branch


2

สำหรับกรณีของฉันฉันเคยมีโฟลเดอร์ branch (หรืออะไรก็ตามที่เรียกว่า) ที่มีตัวพิมพ์ใหญ่จากนั้นฉันจึงสร้างอันใหม่โดยใช้ตัวพิมพ์เล็ก (ตัวพิมพ์เล็ก) แต่ git สร้าง branch ด้วยตัวพิมพ์ใหญ่

ฉันได้สร้างสาขาเหมือนfeature-ABC/branch1ก่อนและผลักดันมัน จากนั้นฉันสร้างสาขาfeature-abc/branch2(สังเกต ABC ตัวพิมพ์เล็ก) และพยายามผลักดันไปที่ระยะไกลโดยใช้git push --set-upstream origin feature-abc/branch2และได้รับข้อผิดพลาด 'ไม่สามารถแก้ไขเป็นสาขา' ดังนั้นฉันจึงgit branchเห็นว่ามันสร้างขึ้นมาfeature-ABC/branch2แทนfeature-abc/branch1ฉันจริงๆ ฉันชำระเงินอีกครั้งgit checkout feature-ABC/feature2และกดโดยใช้ตัวพิมพ์ใหญ่ ( feature-ABC/feature2) เพื่อแก้ปัญหา


2

ฉันประสบปัญหาเดียวกันซึ่งเกิดจากการไปที่สาขาโดยมีปลอกผิด คอมไพล์ให้ฉันสลับไปยังสาขาที่มีปลอกที่ไม่ถูกต้องเช่นแทนfeature/Name feature/nameพบวิธีแก้ปัญหาที่ง่ายกว่าที่ระบุไว้ข้างต้นเพียง:

  • ยอมรับการเปลี่ยนแปลงของคุณกับ 'คุณลักษณะ / ชื่อ'
  • git checkout master (or develop)
  • git checkout feature/name <พร้อมปลอกที่ถูกต้อง
  • git push

2

ฉันจะแก้ไขนี้ใน Windows 10 โดยใช้คำสั่งแทนGitBash

มันเกี่ยวข้องกับตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และวิธีการจัดการกับคอมไพล์และบรรทัดคำสั่ง


1

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

git branch -D <name-of-different-case-branch>

แล้วลองดันอีกครั้ง


1

คำตอบที่แก้ไขเล็กน้อยของ @Ty Le:

ฉันไม่จำเป็นต้องเปลี่ยนแปลงไฟล์ใด ๆ - ฉันมีสาขาชื่อ 'คุณลักษณะ / ... ' และในขณะที่ผลักดันต้นน้ำฉันเปลี่ยนชื่อเป็น 'คุณลักษณะ / ... ' (กรณีของตัวอักษรตัวแรกถูกเปลี่ยนเป็นตัวอักษรล่าง ).


0

ฉันเพิ่งมีปัญหานี้เช่นกันและสาขาของฉันปกติเริ่มต้นด้วยpb-3.1-12345/namebranchแต่ผมอุบัติเหตุทุน 2 PB-3.1/12345/namebranchตัวอักษรตัวแรก หลังจากเปลี่ยนชื่อสาขาให้ใช้อักษรตัวพิมพ์เล็กฉันสามารถสร้างสาขาได้


0

สำหรับฉันฉันตั้งชื่อสาขาเป็น

Rel4.6 / bug / คำอธิบายสั้น ๆ

สิ่งที่ฉันต้องทำคือเมื่อใช้

git push origin R elx.x / bug / Some-short-description

เขียน

git push origin r elx.x / bug / some-short-description

อย่างที่ฉันเคยสร้างกิ่งก้านโดยใช้อักษรตัวเล็ก r ใน rel

แล้วอะไรที่ทำให้เกิดปัญหานี้?

เมื่อฉันแสดงรายการ.git/refs/headsเนื้อหาที่ฉันพบ

drwxr-xr-x  4 eslam_khoga  staff   128B Sep 22 20:22 relx.x

แต่เปล่าRelx.x!

และข้างในbugและข้างในbugชื่อสาขาของฉัน

ดังนั้นคอมไพล์พยายามสร้าง dir ที่มีชื่อเดียวกัน แต่ใช้ตัวพิมพ์เล็กและใหญ่ต่างกัน

แต่ระบบไม่คำนึงถึงขนาดตัวพิมพ์

นั่นคือสาเหตุของปัญหานี้!


0

มีปัญหาเดียวกันกับปลอกที่แตกต่างกัน

ทำการชำระเงินเพื่อพัฒนา (หรือต้นแบบ) แล้วเปลี่ยนชื่อ (ชื่อผิด) เป็นอย่างอื่นเช่นทดสอบ

  • การพัฒนา git checkout
  • git branch -m การทดสอบชื่อผิด

จากนั้นเปลี่ยนชื่อกลับเป็นชื่อที่ถูกต้อง

  • git branch -m ทดสอบชื่อที่ถูกต้อง

จากนั้นชำระเงินไปยังสาขาชื่อที่ถูกต้อง

  • git checkout ชื่อที่ถูกต้อง

จากนั้นก็ทำงานเพื่อผลักดันไปยังสาขาที่ห่างไกล

  • git push ต้นกำเนิดชื่อที่ถูกต้อง

0

สำหรับฉันปัญหาคือฉันมีคอมไพล์และระบบไฟล์ macOS ของฉันตั้งค่าเป็นสองกรณีที่แตกต่างกัน Mac ของฉันได้รับการจัดรูปแบบAPFS / Is Case-Sensitive: ไม่ใช่แต่ฉันได้พลิกการตั้งค่าคอมไพล์ของฉันในบางจุดเพื่อพยายามแก้ไขปัญหาแปลก ๆ กับการตั้งชื่อเนื้อหาภาพ Xcode ดังนั้นgit config --global core.ignorecase falseเท็จ การพลิกกลับไปจัดแนวการตั้งค่าและสร้างสาขาใหม่และผลักดันให้ฉันกลับมาอยู่ในเส้นทาง

git config --global core.ignorecase true

เครดิต: https://www.hanselman.com/blog/GitIsCasesensitiveAndYourFilesystemMayNotBeWeirdFolderMergingOnWindows.aspx


0

ฉันมีปัญหาเดียวกัน แต่ได้รับการแก้ไขแล้ว ฉันรู้ว่าชื่อสาขามีความละเอียดอ่อน สาขาหลักใน GitHub คือ 'master' ในขณะที่คำสั่ง gitbash ของฉันคือ 'Master' ฉันเปลี่ยนชื่อ Master ในพื้นที่เก็บข้อมูลท้องถิ่นเป็น Master และใช้งานได้! 😀😀


0

ฉันพบปัญหาเดียวกันและสังเกตเห็นว่าฉันผสมปลอกขณะตรวจสอบสาขา ฉันเช็คเอาท์branchNameแทนBranchNameและเมื่อพยายามกดไปที่รีโมตฉันก็พบข้อผิดพลาดเดียวกัน

การแก้ไข:

git push --set-upstream origin BranchName

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

git checkout BranchName 

และควรเป็นข้อมูลล่าสุดเกี่ยวกับการผลักดันครั้งล่าสุดของคุณ


-1

หากคุณอยู่ในสาขาท้องถิ่นสามารถเปลี่ยนชื่อสาขา "คุณลักษณะ / ชื่อ" เป็น "คุณลักษณะ / ชื่อ"

git -m feature/Name

หากคุณมีปัญหาในgit pushการชำระเงินในสาขาอื่น (เช่นพัฒนา) และกลับไปที่สาขาที่เปลี่ยนชื่อ

git checkout feature/Name

แล้วลองอีกครั้ง git push

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