Uzak git dalı silinirken “hata: kalifiye olmayan hedefe itilemiyor”


139

İle uzak git şubesini silmeye çalışıyorum

git push origin :my_remote_branch

ve elde:

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'

bunlar benim şu anki şubelerim

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

Bu daldan nasıl kurtulabileceğime dair herhangi bir fikir takdir edilecektir.


Bir denedin mi git fetcho var olmayan uzak ad sabit olmadığını görmek için? İçeri .git\refs\remotes\origingirip my_remote_branchdosyayı silmeye çalıştınız, bunun yeterli olup olmadığını görmek için?
VonC

yaptım git fetchama bu yardım etmedi. Dosyayı manuel olarak silmeden önce daha basit bir çözüm aramaya çalışacaktır.
Hugo

o dosyayı silmeyi veya en azından taşımayı deneyin: yalnızca o dalın ucunun SHA1'ini içerir.
VonC

45
git fetch -pEski izleme dallarından kurtulmak için yapmanız gerekir .
Jan Hudec

Yanıtlar:


270

Aslında refs/remotes/origin/my_remote_branchanlamına gelmez yerel depoda mevcut refs/heads/my_remote_branchbulunmaktadır originuzak depo.

Do git fetch -p originyapmak için refs/remotes/origin/my_remote_branchzaten kökenli silinmiş eğer go away. Bu -pseçenek getirme işlemine artık ilgili uzaktan kumandalarda bulunmayan izleme dallarını silmesini söyler; varsayılan olarak çevrede tutulurlar.


12
git fetch -p originbenim için düzeltti. Çok teşekkürler.
redimp

1
Cevabınız harika. Kısa ve öz hakkında!
1nstinct

budama yardımcı olmadı! iken git push origin --delete origin/feature/x, mevcut olmayan ref hakkında bana hata verdi git push origin :feature/xdalı silmek yaptı. Bu yüzden sanırım git push origin --delete <branchName>branchName (?) Kökeni içermemelidir ama kafa karıştırıcı olan kafa karıştırıcıdır.
tire

@dashesy, asıl askerden farklı bir durumdaydın. Orijinal soruda sorun, uzak dalın muhtemelen başka biri tarafından zaten silinmiş olmasıydı , bu yüzden sadece yerel olanın senkronize edilmesi gerekiyordu. Uzaktan kumandayı silerken. Gerçekten de, komut olmalıdır git push origin --delete feature/xEğer dalın adı veriyoruz çünkü kökeni de , ve onu yok değil oradaki ön eki (iki form aksi eşanlamlı zaten vardır).
Jan Hudec

@ JanHudec mantıklı. Bash complete, :dahil etmemek için kullanıldığında akıllıdır , originancak varyantı kullanırken origin/branch_nameyerine tamamlanır . branch_name--delete
16:15

56

Eski uzak git dallarını temizleyen soru bulundu ve bu hile yaptı

git branch -r -d origin/my_remote_branch

Bunu yaklaşık bir saattir yapmaya çalışıyorum, çok teşekkürler!
sebkkom

Bu uzak dalı silmez. Git getirmeye giderseniz şubeyi tekrar göreceksiniz. Sadece yerel uzak şube listenizden kaldırın.
Patrick Desjardins

2
@PatrickDesjardins şubeyi tam olarak git push origin :my_remote_branchuzaktan siler ve git branch -r -d origin/my_remote_branchyerel uzak şubeler listemden kaldırır
Hugo

11

Daha önce silinmiş olan uzak bir dalı silmeye çalışırken bununla karşılaştım. Tek gereken bir kuru erikti:

git remote prune origin

4

Uzak dalı zorla silmek için iki seçeneği deneyin

seçenek 1

get push origin --delete <branchName>

seçenek 2

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

3
git branch -r -d origin/my_remote_branch

benim için yeterli değildi. Sunucuya gidip şubeyi kaldırmak için doğrudan git diziniyle (tehlikeli ve çirkin) çalışmak zorunda kalmadan önce:

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

Sadece tehlikeli ve çirkin değil, aynı zamanda yanlış . Bir kere, bu soru, yerel olarak şube silme konusunda ise gelmiştir uzak olarak silindi. Diğeri için ise, bir şubeyi uzaktan silmek sadece bir mesele git push origin :my_remote_branch. Kolona dikkat edin.
Jan Hudec

Haklısın Jan, bu git push origin :my_remote_branchnormal bir yol. Bu çirkin ve tehlikeli yol, bunun işe yaramadığı zamandır (örneğin, yanlış yapılandırılmış git nedeniyle).
pevik

1

Benzer bir sorunum var. İlk önce bu tartışmaya gittim, ancak https://stackoverflow.com/a/32147743/4209849 görünene kadar sorunu çözemedim .

ve sadece ayırt edici bir ipucu ekler origin/my-branch-nameve my-branch-name.

Spesifik olarak, şunu kullanmalıyım:

git push origin :my_remote_branch

onun yerine

git push origin :origin/my_remote_branch

Bu en azından sorunumu çözdü, umarım başkalarına da yardımcı olur.


1

Benim için sorun, bunun github'daki varsayılan şubem olmasıydı. Varsayılan dalı değiştirdim, sonra silme işlemi başarılı oldu.

Umarım birine yardımcı olur


0

Aynı sorun vardı, ben ./.git/configdahil olmak üzere dosyamı el ile düzenledi :

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

Hangi sonuçlandı: error: src refspec branchName matches more than one.Bu ben çalışarak sabit $git tag -d branchName. Bundan sonra yeni dalı yukarı doğru itebildim.


0

Bu benim için çalıştı: Github kullanıcı arayüzünde uzak dalı oluşturdum ve aynı adı taşıyan yerel şubemi ittim. Başka şekillerde çalışmazsa deneyin. Diğer yol ise yerel olarak yeni bir şube oluşturmak ve boş bir dalı itmek ve daha sonra taahhüdünüzü almak ve uzaktan kumandanıza tekrar itmek olacaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.