เมื่อลบสาขา“ ข้อผิดพลาด: ไม่สามารถผลักดันไปยังปลายทางที่ไม่ผ่านการตรวจสอบ”


139

ฉันกำลังพยายามลบสาขา git ระยะไกลด้วย

git push origin :my_remote_branch

และรับ:

error: unable to push to unqualified destination: my_remote_branch
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'git@example.com:/myrepo'

นี่คือสาขาปัจจุบันของฉัน

git branch -a
* develop
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/my_remote_branch

git branch -r --merged
  origin/HEAD -> origin/master
  origin/develop
  origin/master

ความคิดเห็นใด ๆ เกี่ยวกับวิธีกำจัดสาขานี้จะได้รับการชื่นชม


คุณลอง a git fetchเพื่อดูว่าแก้ไขชื่อระยะไกลที่ไม่มีอยู่หรือไม่? คุณลองเข้าไปใน.git\refs\remotes\originแล้วลบmy_remote_branchไฟล์เพื่อดูว่ามันเพียงพอหรือไม่
VonC

ทำgit fetchแต่นั่นไม่ได้ช่วย จะพยายามค้นหาวิธีแก้ปัญหาที่ตรงไปข้างหน้ามากขึ้นก่อนที่จะพยายามลบไฟล์ด้วยตนเอง
Hugo

พยายามที่จะลบหรืออย่างน้อยก็ย้ายไฟล์นั้น: มันมีเพียง SHA1 ของเคล็ดลับของสาขานั้น
VonC

45
คุณต้องทำgit fetch -pเพื่อกำจัดกิ่งติดตามค้าง
Jan Hudec

คำตอบ:


270

ความจริงที่refs/remotes/origin/my_remote_branchมีอยู่ในที่เก็บในเครื่องของคุณไม่ได้แปลว่าrefs/heads/my_remote_branchมีอยู่ในที่originเก็บระยะไกล

ทำgit fetch -p originเพื่อให้refs/remotes/origin/my_remote_branchหายไปหากถูกลบไปแล้วในแหล่งกำเนิด -pตัวเลือกบอกดึงข้อมูลลบสาขาการติดตามการใด ๆ ที่ไม่อยู่ในรีโมทที่สอดคล้องกัน; โดยค่าเริ่มต้นพวกเขาจะถูกเก็บไว้รอบ ๆ


12
git fetch -p originแก้ไขให้ฉัน ขอบคุณมาก.
redimp

1
คำตอบของคุณยอดเยี่ยม สั้นและสำคัญ!
พฤศจิกายน

การตัดแต่งกิ่งไม่ได้ช่วย! ในขณะที่git push origin --delete origin/feature/xฉันให้ข้อผิดพลาดเกี่ยวกับการอ้างอิงที่ไม่มีอยู่git push origin :feature/xได้ลบสาขา ดังนั้นฉันคิดว่าgit push origin --delete <branchName>ไม่ควรมีต้นกำเนิดใน branchName (?) แต่มันก็เสร็จสิ้นการทุบตีซึ่งทำให้เกิดความสับสน
dashesy

@dashy คุณอยู่ในสถานการณ์ที่แตกต่างจากผู้ถามเดิม ในคำถามเดิมปัญหาคือว่าสาขาระยะไกลถูกลบไปแล้วโดยคนอื่นน่าจะเป็นดังนั้นคนในพื้นที่เท่านั้นที่จะได้รับการซิงค์ ในขณะที่คุณกำลังลบระยะไกล อันที่จริงคำสั่งที่ควรจะเป็นgit push origin --delete feature/xเพราะคุณจะให้ชื่อของสาขาที่จุดกำเนิดและมันไม่ได้มีคำนำหน้าว่ามี (ทั้งสองรูปแบบแล้วในความหมายเหมือนกันเป็นอย่างอื่น)
Jan Hudec

@JanHudec เข้าท่า Bash complete เป็นสมาร์ทเมื่อใช้:เพื่อไม่รวมoriginแต่จะเสร็จสิ้นorigin/branch_nameแทนที่จะbranch_nameใช้เมื่อใช้--deleteตัวแปร
dashesy

56

พบคำถามทำความสะอาดกิ่ง git ระยะไกลและสิ่งนี้ได้หลอกลวง

git branch -r -d origin/my_remote_branch

ฉันพยายามทำสิ่งนี้มาประมาณหนึ่งชั่วโมงแล้วขอบคุณมาก!
sebkkom

นี่ไม่ได้เป็นการลบสาขาระยะไกล ถ้าคุณไปเรียก git คุณจะเห็นสาขาอีกครั้ง มันแค่ลบออกจากรายการรีโมตสาขาของคุณ
Patrick Desjardins

2
@PatrickDesjardins git push origin :my_remote_branchลบสาขาออกจากรีโมตอย่างแน่นอนและgit branch -r -d origin/my_remote_branchลบออกจากรายชื่อสาขาในพื้นที่ของฉัน
Hugo

11

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

git remote prune origin

4

ลองทำตามสองทางเลือกเพื่อลบสาขาระยะไกลโดยการบังคับ

ตัวเลือกที่ 1

get push origin --delete <branchName>

ตัวเลือก 2

git fetch -p origin
git branch -r -d origin/<branchName>

3
git branch -r -d origin/my_remote_branch

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

ssh mygitserver
su - git
cd /home/git/repositories/my_remote_branch.git/
git  --git-dir=. --work-tree=/tmp/ branch -D my_remote_branch

มันไม่ใช่แค่อันตรายและน่าเกลียดก็ยังไม่ถูกต้อง สำหรับสิ่งหนึ่งคำถามนี้เป็นเรื่องเกี่ยวกับการลบสาขาเฉพาะเมื่อมันได้ถูกลบออกไปในระยะไกล และอื่น ๆ git push origin :my_remote_branchสำหรับการลบสาขาจากระยะไกลเป็นเพียงเรื่องของการ ระวังลำไส้ใหญ่
Jan Hudec

คุณพูดถูกนั่นgit push origin :my_remote_branchเป็นเรื่องปกติ วิธีที่น่าเกลียดและอันตรายนี้คือเมื่อสิ่งนี้ไม่ทำงาน (เช่นเนื่องจากคอมไพล์ที่ตั้งค่าไว้ไม่ถูกต้อง)
pevik

1

ฉันมีปัญหาที่คล้ายกัน ที่แรกที่ไปสนทนานี้ แต่ฉันไม่สามารถแก้ปัญหาจนผมเห็นhttps://stackoverflow.com/a/32147743/4209849

ซึ่งเพียงแค่เพิ่มเคล็ดลับเกี่ยวกับความแตกต่างและorigin/my-branch-namemy-branch-name

หากต้องการเจาะจงฉันควรใช้:

git push origin :my_remote_branch

แทน

git push origin :origin/my_remote_branch

อย่างน้อยก็แก้ปัญหาของฉันหวังว่ามันจะช่วยคนอื่นได้เช่นกัน


1

สำหรับฉันปัญหาคือว่านี่เป็นสาขาเริ่มต้นของฉันใน Github ฉันเปลี่ยนสาขาเริ่มต้นแล้วการดำเนินการลบก็สำเร็จ

หวังว่ามันจะช่วยให้ใครบางคน


0

หากมีปัญหาเดียวกันนี้ฉันแก้ไข./.git/configไฟล์ด้วยตนเองเพื่อรวม:

[branch "branchName"]
remote = origin
merge = refs/heads/branchName

ซึ่งส่งผลให้เป็น: ฉันนี้แก้ไขได้โดยการทำงานerror: src refspec branchName matches more than one. $git tag -d branchNameหลังจากนั้นฉันก็สามารถผลักดันสาขาใหม่ขึ้นสู่ต้นน้ำ


0

สิ่งนี้ใช้งานได้สำหรับฉัน: ฉันสร้างสาขาระยะไกลบน GitHub UI แล้วผลักสาขาท้องถิ่นของฉันที่มีชื่อเดียวกัน ลองใช้ในกรณีที่วิธีอื่นไม่ทำงาน วิธีอื่น ๆ ก็คือการสร้างสาขาใหม่ในพื้นที่และผลักสาขาที่ว่างเปล่าและต่อมาเชอร์รี่รับความมุ่งมั่นของคุณและผลักดันอีกครั้งไปยังระยะไกลของคุณ

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