Khi xóa từ xa chi nhánh git lỗi Lỗi: không thể đẩy đến đích không đủ tiêu chuẩn


139

Tôi đang cố gắng xóa một chi nhánh git từ xa với

git push origin :my_remote_branch

và nhận được:

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'

đây là những chi nhánh hiện tại của tôi

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

Mọi ý tưởng về cách tôi có thể thoát khỏi chi nhánh này sẽ được đánh giá cao.


Bạn đã thử a git fetchđể xem nó đã sửa tên từ xa không tồn tại chưa? Bạn đã thử đi vào .git\refs\remotes\originvà xóa các my_remote_branchtập tin, để xem nếu điều đó là đủ?
VonC

đã làm git fetchnhưng điều đó không giúp được gì. Sẽ cố gắng tìm kiếm một giải pháp chuyển tiếp thẳng hơn trước khi cố gắng xóa tệp theo cách thủ công.
Hugo

cố gắng xóa hoặc ít nhất là di chuyển tệp đó: nó chỉ chứa SHA1 của đầu nhánh đó.
VonC

45
Bạn phải làm git fetch -pđể thoát khỏi các nhánh theo dõi cũ.
Jan Hudec

Câu trả lời:


270

Thực tế refs/remotes/origin/my_remote_branchtồn tại trong kho lưu trữ cục bộ của bạn không có nghĩa là refs/heads/my_remote_branchtồn tại trong originkho lưu trữ từ xa.

Làm git fetch -p origincho refs/remotes/origin/my_remote_branchbiến mất nếu nó đã bị xóa trong nguồn gốc. Các -ptùy chọn nói lấy để xóa bất kỳ chi nhánh theo dõi không còn tồn tại trong điều khiển từ xa tương ứng; theo mặc định chúng được giữ xung quanh.


12
git fetch -p originsửa nó cho tôi Cảm ơn nhiều.
lại

1
Câu trả lời của bạn thật tuyệt vời. Ngắn gọn và về bản chất!
1

cắt tỉa không giúp được gì! trong khi git push origin --delete origin/feature/xđã cho tôi lỗi về ref git push origin :feature/xkhông tồn tại đã xóa chi nhánh. Vì vậy, tôi đoán git push origin --delete <branchName>không nên bao gồm nguồn gốc trong nhánhName (?) Nhưng nó đã hoàn thành bash gây nhầm lẫn.
bảnh bao

@dashesy, bạn đã ở trong tình huống khác với người hỏi ban đầu. Trong câu hỏi ban đầu, vấn đề là nhánh từ xa đã bị xóa , có lẽ là do người khác, do đó chỉ có địa phương phải được đồng bộ hóa. Trong khi bạn đang xóa điều khiển từ xa. Thật vậy, lệnh nên là git push origin --delete feature/x, bởi vì bạn đang đặt tên của nhánh ở gốc và nó không có tiền tố đó (dù sao hai hình thức này đồng nghĩa với nhau).
Jan Hudec

@JanHudec có ý nghĩa. Bash hoàn thành thông minh khi sử dụng :để không bao gồm originnhưng nó hoàn thành origin/branch_namethay vì chỉ đơn giản branch_namekhi sử dụng --deletebiến thể.
bảnh bao

56

Tìm thấy câu hỏi làm sạch các nhánh git từ xa cũ và điều này đã lừa

git branch -r -d origin/my_remote_branch

Tôi đã cố gắng thực hiện chính xác điều này trong khoảng một giờ, cảm ơn rất nhiều!
sebkkom

Điều này không xóa chi nhánh từ xa. Nếu bạn đi tìm git, bạn sẽ thấy chi nhánh một lần nữa. Nó chỉ loại bỏ nó khỏi danh sách địa phương của chi nhánh từ xa.
Patrick Desjardins

2
@PatrickDesjardins git push origin :my_remote_branchxóa chính xác chi nhánh khỏi điều khiển từ xa và git branch -r -d origin/my_remote_branchxóa nó khỏi danh sách các chi nhánh từ xa địa phương của tôi
Hugo

11

Tôi đã chạy qua điều này khi cố gắng xóa một chi nhánh từ xa đã bị xóa. Tất cả những gì cần thiết là một tỉa:

git remote prune origin

4

Hãy thử làm theo hai tùy chọn để xóa chi nhánh từ xa

lựa chọn 1

get push origin --delete <branchName>

Lựa chọn 2

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

3
git branch -r -d origin/my_remote_branch

là không đủ cho tôi Trước khi tôi phải đến máy chủ và làm việc với thư mục git trực tiếp (rất nguy hiểm và xấu xí) để xóa chi nhánh:

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

Nó không chỉ nguy hiểm và xấu xí, mà còn sai . Đối với một điều, câu hỏi này là về việc xóa chi nhánh cục bộ khi nó đã bị xóa từ xa. Và đối với người khác, xóa một chi nhánh từ xa chỉ là một vấn đề git push origin :my_remote_branch. Tâm đại tràng.
Jan Hudec

Bạn nói đúng Jan, đó git push origin :my_remote_branchlà cách bình thường. Cách xấu xí và nguy hiểm này là khi nó không hoạt động (ví dụ do git cấu hình sai).
pevik

1

Tôi có vấn đề tương tự. Lần đầu tiên đi đến cuộc thảo luận này, tuy nhiên tôi không thể giải quyết vấn đề cho đến khi tôi thấy https://stackoverflow.com/a/32147743/4209849 .

mà chỉ cần thêm một mẹo để phân biệt origin/my-branch-namemy-branch-name.

Để cụ thể, tôi nên sử dụng:

git push origin :my_remote_branch

thay vì

git push origin :origin/my_remote_branch

Điều này đã giải quyết vấn đề của tôi ít nhất, hy vọng nó cũng sẽ giúp đỡ người khác.


1

Đối với tôi, vấn đề là, đây là chi nhánh mặc định của tôi trên github. Tôi đã thay đổi chi nhánh mặc định, sau đó xóa hoạt động đã thành công.

Hy vọng nó sẽ giúp được ai đó


0

Có vấn đề tương tự, tôi đã chỉnh sửa thủ công ./.git/configtệp của mình để bao gồm:

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

Điều này dẫn đến: error: src refspec branchName matches more than one.Điều này tôi đã sửa bằng cách chạy $git tag -d branchName. Sau đó tôi đã có thể đẩy chi nhánh mới lên thượng nguồn.


0

Điều này làm việc cho tôi: Tôi đã tạo chi nhánh từ xa trên giao diện người dùng github và sau đó đẩy chi nhánh địa phương có cùng tên với nó. Hãy thử nó trong trường hợp những cách khác không hoạt động. Một cách khác là tạo một chi nhánh mới tại địa phương và đẩy một chi nhánh trống và sau đó chọn lấy cam kết của bạn và đẩy lại từ xa.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.