git rebase ร้ายแรง: ต้องการการแก้ไขครั้งเดียว


162

ฉันมีสาขาของที่เก็บสาธารณะและฉันพยายามที่จะอัพเดทสาขาของฉันด้วยการกระทำในปัจจุบันจากที่เก็บต้นฉบับ:

$ git fetch <remote>
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (20/20), done.
remote: Total 20 (delta 12), reused 0 (delta 0)
Unpacking objects: 100% (20/20), done.
From git://github.com/path_to/repo
  9b70165..22127d0  master     -> $/master
$ git rebase <remote>
fatal: Needed a single revision
invalid upstream <remote>

นี่<remote>คือแทนที่ชื่อระยะไกลของฉันและไม่ใช่ชื่อระยะไกลของฉันจริง ๆ เอกสารเกี่ยวกับข้อผิดพลาดนี้ดูเหมือนจะหลวมไปหน่อย


2
ฉันได้รับข้อผิดพลาดนี้ด้วยเหตุผลที่ไม่เกี่ยวข้อง - ใช้ "git rebase --interactive c4e9c94 ^" จากพรอมต์คำสั่ง Windows มันแจ้งให้ฉัน "เพิ่มเติมหรือไม่" และไม่ว่ามันจะตอบคำถามได้อย่างไรมันก็พูดว่า แต่เมื่อฉันรันคำสั่งเดียวกันจากทุบตีมันทำงานได้ดี
Richard Beier

ในฐานะที่เป็นบันทึกด้านข้างสำหรับฉันนอกเหนือจากการมีสาขาต้นน้ำที่มีรายการ "ระยะไกล" ฉันต้องดึงข้อมูลสาขาเฉพาะที่ฉันต้องการรีบูต "git fetch <upstream> master" การดึง <upstream> ด้วย "git fetch <upstream>" ยังคงทำให้ฉันมีข้อผิดพลาดนี้
ความหวาน

คำตอบ:


132

คุณจำเป็นต้องให้ชื่อของสาขา (หรืออื่น ๆ ที่กระทำตัวระบุ) git rebaseไม่ใช่ชื่อของระยะไกลเพื่อที่

เช่น:

git rebase origin/master

ไม่:

git rebase origin

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


2
หลังควรทำงานจริง - ในบริบทเตะถูกตีความว่าเป็นorigin origin/HEADฉันเคยเห็นที่เก็บท้ายไม่รู้ว่าorigin/HEADมันคืออะไร...
Cascabel

1
@Jefromi: ฉันกลัวว่าฉันไม่เชื่อคุณฉันได้ลองgit rebase originในพื้นที่เก็บข้อมูลทดสอบ (ที่originมีHEAD) และฉันได้รับข้อผิดพลาดของ OP เอกสารประกอบสำหรับ rebase <upstream>ไม่ได้บอกว่าเป็นชื่อที่ระยะไกลถูกต้องสำหรับ
CB Bailey

1
@Charles: ก็อาจเป็นข้อผิดพลาดหรือไม่? git rev-parse originใช้งานได้เช่นเดียวกับgit rebase originใน git.git clone ของฉัน (ในกรณีที่เป็นไปข้างหน้าอย่างรวดเร็วไปข้างหน้าและกรณีการรีบูทที่แท้จริง
Cascabel

@Jefromi: คุณสามารถgit describeของคุณHEAD?
CB Bailey

@Charles: ทันสมัย ​​v1.7.4-rc3! ฉันไม่ได้อยากเป็นอย่างมากที่จะทำรอยสักที่กำลังมองหาสิ่งนี้ ...
Cascabel

28

ตรวจสอบว่าคุณสะกดชื่อสาขาได้อย่างถูกต้อง ฉันกำลัง rebasing สาขาเรื่องราว (เช่นbranch_name) และลืมส่วนของเรื่อง (เช่นstory/branch_name) จากนั้นคอมไพล์คายข้อผิดพลาดนี้มาที่ฉันซึ่งไม่สมเหตุสมผลในบริบทนี้


ตรงนี้ พิมพ์featureNameเมื่อสาขามีชื่อจริงfeatures/featureName
pkamb

3
ยังเป็นความคิดที่ดีที่จะมองหาการพิมพ์ผิด ๆ ที่ง่ายขึ้น ฉันสลับตัวอักษรสองตัวโดยบังเอิญเมื่อสร้างสาขาและตัวพิมพ์นี้ยากที่จะมองเห็น
Olga

25

ฉันวิ่งเข้าไปในนี้และรู้ว่าฉันไม่ได้ดึงข้อมูลต้นน้ำก่อนที่จะพยายามลดระดับ สิ่งที่ฉันต้องการคือgit fetch upstream


10

ปัญหาคือคุณแยกสาขาออกจาก .... ที่คุณพยายามจะรีบูต คุณไม่สามารถ rebase ไปยังสาขาที่ไม่มีการคอมมิชชันที่สาขาปัจจุบันของคุณถูกสร้างขึ้นในครั้งแรก

ฉันได้รับสิ่งนี้เมื่อฉันรีบูทสาขาท้องถิ่น X เป็นผลัก Y หนึ่งครั้งจากนั้นพยายามรีบูตสาขา (สร้างครั้งแรกบน X) เป็นผลักดัน Y

แก้ไขให้ฉันด้วยการเปลี่ยนเป็น X

ฉันไม่มีปัญหาในการรีบูทไปยังสาขาที่อยู่ห่างไกล (อาจไม่ได้ชำระเงิน) หากสาขาของฉันในปัจจุบันเกิดจากบรรพบุรุษของสาขานั้น


3
คุณสามารถที่จะ rebase --ontoสาขาดังกล่าวกับ ทุกอย่างลงมาจากบางบรรพบุรุษร่วมกัน (สำหรับเก็บปกติ) เพื่อที่ว่าไม่ได้เป็นปัญหา ผมเคยข้อผิดพลาดจากการพยายามที่จะเข้าสู่ rebase เมื่อฉันยังไม่ได้สร้างสาขาที่จะติดตามfoo origin/foo
cdunn2001


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