Bagaimana cara saya menghapus cabang Git secara lokal dan jarak jauh?

16960

Saya ingin menghapus cabang secara lokal dan jarak jauh.

Upaya Gagal untuk Menghapus Cabang Jarak Jauh

$ git branch -d remotes/origin/bugfix
error: branch 'remotes/origin/bugfix' not found.

$ git branch -d origin/bugfix
error: branch 'origin/bugfix' not found.

$ git branch -rd origin/bugfix
Deleted remote branch origin/bugfix (was 2a14ef7).

$ git push
Everything up-to-date

$ git pull
From github.com:gituser/gitproject

* [new branch] bugfix -> origin/bugfix
Already up-to-date.

Apa yang harus saya lakukan berbeda untuk berhasil menghapus remotes/origin/bugfixcabang baik secara lokal maupun jarak jauh?

Matthew Rankin
sumber
1060
Catatan Moderator: Jika Anda ingin menjawab pertanyaan ini, harap perhatikan bahwa sudah ada 40 jawaban yang diposting. Apakah jawaban baru Anda akan menambah nilai substansial?
Robert Harvey
54
Catatan: untuk Git 2.5+ (Q2 2015), pesan yang tepat adalah " deleted remote-tracking branch": lihat github.com/git/git/commit/…
VonC
Anda mungkin tertarik pada skrip ini yang menyederhanakan perbedaan antara menghapus cabang lokal DAN yang jauh: tlbx.app/blog/delete-any-git-branch-the-easy-way
Mig
@RobertHarvey hanya 39 sekarang
Adam
@Adam: 81. 42 jawaban dihapus karena berbagai alasan. Obsesi publik yang tidak dapat dijelaskan dengan topik tertentu adalah salah satu misteri terbesar kehidupan.
Robert Harvey

Jawaban:

21432

Ringkasan bisnis plan

$ git push -d <remote_name> <branch_name>
$ git branch -d <branch_name>

Perhatikan bahwa dalam kebanyakan kasus nama jarak jauh adalah origin. Dalam hal ini Anda harus menggunakan perintah seperti itu.

$ git push -d origin <branch_name>

Hapus Cabang Lokal

Untuk menghapus cabang lokal gunakan salah satu dari yang berikut:

$ git branch -d branch_name
$ git branch -D branch_name

Catatan: The -dpilihan adalah alias untuk --delete, yang hanya menghapus cabang jika sudah digabung sepenuhnya di cabang hulu. Anda juga bisa menggunakan -D, yang merupakan alias untuk --delete --force, yang menghapus cabang "terlepas dari status gabungannya." [Sumber: man git-branch]

Hapus Cabang Jarak Jauh [Diperbarui pada 8-Sep-2017]

Pada Git v1.7.0 , Anda dapat menghapus cabang jarak jauh menggunakan

$ git push <remote_name> --delete <branch_name>

yang mungkin lebih mudah diingat daripada

$ git push <remote_name> :<branch_name>

yang ditambahkan di Git v1.5.0 "untuk menghapus cabang jarak jauh atau tag."

Dimulai pada Git v2.8.0 Anda juga dapat menggunakan git pushdengan -dpilihan sebagai alias untuk --delete.

Oleh karena itu, versi Git yang telah Anda instal akan menentukan apakah Anda perlu menggunakan sintaks yang lebih mudah atau lebih sulit.

Hapus Cabang Jarak Jauh [Jawaban Asli dari 5-Jan-2010]

Dari Bab 3 Pro Git oleh Scott Chacon:

Menghapus Cabang Jarak Jauh

Misalkan Anda sudah selesai dengan cabang jarak jauh - katakanlah, Anda dan kolaborator Anda selesai dengan fitur dan telah menggabungkannya ke cabang master jarak jauh Anda (atau cabang apa pun yang menggunakan jalur kode stabil Anda). Anda dapat menghapus cabang jauh menggunakan sintaks agak tumpul git push [remotename] :[branch]. Jika Anda ingin menghapus cabang server-fix Anda dari server, Anda menjalankan yang berikut ini:

$ git push origin :serverfix
To [email protected]:schacon/simplegit.git
 - [deleted]         serverfix

Ledakan. Tidak ada lagi cabang di server Anda. Anda mungkin ingin menutup halaman ini, karena Anda akan memerlukan perintah itu, dan Anda mungkin akan lupa sintaksisnya. Cara untuk mengingat perintah ini adalah dengan mengingat git push [remotename] [localbranch]:[remotebranch]sintaks yang kita bahas sebelumnya. Jika Anda meninggalkan [localbranch]bagiannya, maka pada dasarnya Anda mengatakan, "Jangan ambil apa pun di sisiku dan jadikan itu [remotebranch]."

Saya mengeluarkan git push origin: bugfixdan itu bekerja dengan indah. Scott Chacon benar — saya ingin mendengarkan halaman itu (atau hampir-hampir telinga anjing dengan menjawab ini di Stack Overflow).

Maka Anda harus menjalankan ini di komputer lain

# Fetch changes from all remotes and locally delete 
# remote deleted branches/tags etc
# --prune will do the job :-;
git fetch --all --prune

untuk menyebarkan perubahan.

Matthew Rankin
sumber
353
Jangan lupa untuk melakukan git fetch --all --prunepada mesin lain setelah menghapus cabang jarak jauh di server. ||| Setelah menghapus cabang lokal dengan git branch -ddan menghapus cabang jarak jauh dengan git push origin --deletemesin lain mungkin masih memiliki "cabang pelacakan usang" (untuk melihat mereka melakukannya git branch -a). Untuk menyingkirkan ini lakukan git fetch --all --prune.
Trevor Boyd Smith
14
selain @ TrevorBoydSmith's git branch -auntuk melihat semua cabang, Anda juga dapat menggunakan git branch -runtuk melihat cabang jarak jauh saja. lihat juga git remote show origin- sumber: gitready.com/intermediate/2009/02/13/list-remote-branches.html
Sandra
17
Saya harus lari git branch -D Branch_Nameuntuk menyingkirkan cabang setempat
Kolob Canyon
11
@KolobCanyon Anda hanya perlu menggunakan -D jika cabang belum digabungkan ke cabang lain.
BTRUE
3
Pertanyaannya adalah "Apa yang harus saya lakukan berbeda untuk berhasil menghapus cabang remote / asal / bugfix baik secara lokal maupun di GitHub?" Setelah menjalankan perintah di jawaban Anda yang diperbarui, cabang lokal masih ada. Alangkah baiknya jika jawaban yang diterima adalah jawaban yang lengkap .
Benar
3316

Jawaban Matthew sangat bagus untuk menghilangkan cabang yang jauh dan saya juga menghargai penjelasannya, tetapi untuk membuat perbedaan sederhana antara dua perintah:

Untuk menghapus cabang lokal dari mesin Anda:

git branch -d {the_local_branch}(gunakan -Dsebagai gantinya untuk memaksa menghapus cabang tanpa memeriksa status gabungan)

Untuk menghapus cabang jauh dari server:

git push origin --delete {the_remote_branch}

Referensi: Git: Hapus cabang (lokal atau jarak jauh)

Eric Brotto
sumber
250
@megido well -Dforce dihapus, -dmemberi Anda peringatan jika belum bergabung.
TankorSmash
8
Jika cabang lokal Anda tidak bergabung dengan master dan berlari 'git branch -d your_branchmaka Anda akan kesalahan sepertierror: The branch 'your_branch' is not fully merged. If you are sure you want to delete it, run 'git branch -D your_branch'.
geeks
12
Saya akan menyarankan menggunakan -d bukan -D karena lebih aman. Jika -d gagal karena komit unmerged maka Anda perlu menilai itu dan jika sudah pasti OK untuk menghapus kemudian gunakan -D.
rooby
7
Lain-lain dengan klon repositori di mana cabang-cabang jauh telah dihapus harus dijalankan git remote prune <name>(misalnya git remote prune origin) untuk secara lokal menghapus cabang basi yang tidak lagi ada di remote.
code_dredd
3
Saya ingin menambahkan bahwa -d memberikan peringatan jika tidak digabungkan dengan KEPALA saat ini. Jika Anda perlu kejelasan, saya merekomendasikan perintah ini. git branch -a --merged origin/masterIni akan mencantumkan cabang apa pun, baik lokal maupun jarak jauh; yang telah digabung menjadi master. Informasi tambahan di sini
Eric
2043

The jawaban singkat

Jika Anda ingin penjelasan lebih rinci tentang perintah berikut, lihat jawaban panjang di bagian selanjutnya.

Menghapus cabang jarak jauh

git push origin --delete <branch>  # Git version 1.7.0 or newer
git push origin -d <branch>        # Shorter version (Git 1.7.0 or newer)
git push origin :<branch>          # Git versions older than 1.7.0

Menghapus cabang lokal

git branch --delete <branch>
git branch -d <branch> # Shorter version
git branch -D <branch> # Force-delete un-merged branches

Menghapus cabang pelacakan jarak jauh lokal

git branch --delete --remotes <remote>/<branch>
git branch -dr <remote>/<branch> # Shorter

git fetch <remote> --prune # Delete multiple obsolete remote-tracking branches
git fetch <remote> -p      # Shorter

The Jawaban panjang : ada tiga cabang yang berbeda untuk menghapus!

Saat Anda berurusan dengan menghapus cabang baik secara lokal maupun jarak jauh, perlu diingat bahwa ada tiga cabang berbeda yang terlibat :

  1. Cabang setempat X.
  2. Cabang asal terpencil X.
  3. Cabang pelacakan jarak jauh lokal yang melacak cabang origin/Xjarak jauh X.

Visualisasi tiga cabang

Poster asli yang digunakan:

git branch -rd origin/bugfix

Yang hanya menghapus cabang pelacakan jarak jauh lokalnya origin/bugfix , dan bukan cabang jarak jauh yang sebenarnya bugfixaktif origin.

Diagram 2

Untuk menghapus cabang jarak jauh yang sebenarnya , Anda perlu

git push origin --delete bugfix

Diagram 3

Detil tambahan

Bagian berikut ini menjelaskan detail tambahan untuk dipertimbangkan saat menghapus cabang pelacak jarak jauh dan Anda.

Mendorong untuk menghapus cabang jarak jauh juga menghapus cabang pelacakan jarak jauh

Perhatikan bahwa menghapus cabang jarak jauh Xdari baris perintah menggunakan git push akan juga menghapus cabang pelacakan jarak jauh lokal origin/X , sehingga tidak perlu memangkas cabang pelacakan jarak jauh yang sudah usang dengan git fetch --pruneatau git fetch -p. Namun, tidak ada salahnya jika Anda tetap melakukannya.

Anda dapat memverifikasi bahwa cabang pelacakan jarak jauh origin/Xjuga dihapus dengan menjalankan yang berikut:

# View just remote-tracking branches
git branch --remotes
git branch -r

# View both strictly local as well as remote-tracking branches
git branch --all
git branch -a

Memangkas asal cabang pelacakan jarak jauh yang usang / X

Jika Anda tidak menghapus cabang jarak jauh Anda Xdari baris perintah (seperti di atas), maka repositori lokal Anda masih akan berisi cabang pelacakan jarak jauh (sekarang sudah usang) origin/X. Ini dapat terjadi jika Anda menghapus cabang jarak jauh secara langsung melalui antarmuka web GitHub, misalnya.

Cara khas untuk menghapus cabang-cabang pelacakan jarak jauh yang sudah usang ini (karena Git versi 1.6.6) adalah dengan menjalankannya git fetchdengan --pruneatau lebih pendek -p. Perhatikan bahwa ini menghapus semua cabang pelacakan jarak jauh lokal yang sudah usang untuk cabang jarak jauh apa pun yang tidak lagi ada di remote :

git fetch origin --prune
git fetch origin -p # Shorter

Berikut adalah kutipan yang relevan dari catatan rilis 1.6.6 (penekanan milik saya):

"git fetch" pelajari --all dan --multipleopsi, untuk menjalankan fetch dari banyak repositori, dan --pruneopsi untuk menghapus cabang pelacakan jarak jauh yang menjadi basi. Ini membuat "git remote update" dan "git remote prune" kurang perlu (tidak ada rencana untuk menghapus "remote update" atau "remote prune", meskipun).

Alternatif untuk pemangkasan otomatis di atas untuk cabang pelacakan jarak jauh yang sudah usang

Atau, alih-alih memangkas cabang-cabang lokal Anda yang sudah ketinggalan zaman git fetch -p, Anda dapat menghindari operasi jaringan tambahan dengan hanya menghapus cabang secara manual dengan bendera --remoteatau -r:

git branch --delete --remotes origin/X
git branch -dr origin/X # Shorter

Lihat juga

Peter Mortensen
sumber
Dari ilustrasi Anda, saya bisa melihat ada repo klon lokal dan repo asal terpencil. Jadi setidaknya ada dua cabang fisik. Di mana cabang ketiga untuk dihapus? Apakah cabang ketiga hanya sebuah pointer yang menunjuk ke sebuah komit di repo klon lokal?
huggie
6
@ Huggie itu cukup benar. Cabang di Git hanyalah penanda yang melekat pada commit. Jadi dalam grafik saya di atas, ada Xdan origin/Xbookmark di klon lokal (2 cabang), dan kemudian ada Xdi remote (membuat 3 cabang).
6
+1 untuk cabang pelacakan jarak jauh. Cabang ini yang menyebabkan masalah ketika Anda mengkloning cabang orang lain. Itu terus melacak komitmen Anda dan menanyakan apakah Anda ingin mendorong ke cabang orang itu.
Kermit_ice_tea
1
Grafiknya sendiri adalah emas. Bagus sekali.
Mogens TrasherDK
1
Demi pembaca masa depan: Apa yang dibicarakan @Kermit_ice_tea di atas adalah cabang lokal (seperti yang dijelaskan dalam jawaban ini), bukan cabang pelacakan jarak jauh . Ketika cabang lokal memiliki "cabang hulu" yang dikonfigurasikan untuknya, secara default akan menarik dari dan mendorong ke cabang jauh itu. Sebuah cabang lokal yang memiliki "cabang upstream" set pada itu disebut sebagai "cabang pelacakan" , sehingga mudah untuk bingung dengan cabang remote pelacakan karena terminologi yang sama.
David P
1521

Langkah-langkah untuk menghapus cabang:

Untuk menghapus cabang jarak jauh:

git push origin --delete <your_branch>

Untuk menghapus cabang lokal , Anda memiliki tiga cara :

1: git branch -D <branch_name>

2: git branch --delete --force <branch_name>  # Same as -D

3: git branch --delete  <branch_name>         # Error on unmerge

Menjelaskan: OK, cukup jelaskan apa yang terjadi di sini!

Cukup lakukan git push origin --deleteuntuk menghapus cabang jarak jauh Anda saja , tambahkan nama cabang di bagian akhir dan ini akan menghapus dan mendorongnya ke jarak jauh pada saat yang sama ...

Juga, git branch -Dyang hanya menghapus cabang lokal saja ! ...

-Dsingkatan --delete --forceyang akan menghapus cabang meskipun tidak digabung (paksa dihapus), tetapi Anda juga dapat menggunakan -dkependekan yang mana--delete yang melempar kesalahan masing-masing dari status gabungan cabang ...

Saya juga membuat gambar di bawah ini untuk menunjukkan langkah-langkahnya:

Hapus cabang jarak jauh dan lokal di git

Alireza
sumber
49
git branch -aakan menampilkan cabang lokal dan jauh. Ini akan membantu Anda memperkenalkan diagram.
LoranceChen
4
perhatikan bahwa jika Anda mengatur cabang yang ingin Anda hapus, Anda perlu checkout cabang selain yang Anda perlu hapus (misalnya: master) sebelum menghapus cabang lokal.
BaDr Amer
Ketika cabang dihapus pada asal, repositori lokal Anda tidak akan memperhatikan itu. Anda masih akan memiliki versi cache yang di-cache secara lokal (yang sebenarnya bagus) tetapi git branch -a masih akan mendaftarkannya sebagai cabang yang jauh. Anda dapat membersihkan informasi itu secara lokal seperti ini: git remote prune originSalinan cabang-cabang Anda yang dihapus tidak terhapus oleh ini. Efek yang sama dicapai dengan menggunakangit fetch --prune
vibs2006
2
Gambar itu mengganggu dan sangat besar dan tidak menambahkan apa pun pada jawabannya. Saya harap ini tidak menjadi tren di SO.
jmiserez
797

Anda juga dapat menggunakan yang berikut ini untuk menghapus cabang jarak jauh

git push --delete origin serverfix

Yang melakukan hal yang sama dengan

git push origin :serverfix

tetapi mungkin lebih mudah diingat.

pagetribe
sumber
1
... dan lebih aman untuk digunakan: O
cst1992
1
Anda lupa bagian tentang menghapus cabang lokal yang dapat dilakukan oleh: git branch -d <local_branch>atau git branch -D <local_branch>untuk penghapusan paksa
Amit Dash
370

Kiat: Saat Anda menghapus cabang menggunakan

git branch -d <branchname> # Deletes local branch

atau

git push origin :<branchname> # Deletes remote branch

hanya referensi yang dihapus. Meskipun cabang sebenarnya dihapus pada remote, referensi untuk itu masih ada di repositori lokal anggota tim Anda. Ini berarti bahwa untuk anggota tim lain cabang yang dihapus masih terlihat ketika mereka melakukan agit branch -a .

Untuk mengatasi ini, anggota tim Anda dapat memangkas cabang yang dihapus dengan

git remote prune <repository>

Ini biasanya git remote prune origin.

pfrenssen
sumber
14
Anda harus mengklarifikasi bahwa git pushoperasi di atas menghapus cabang lokal dan cabang jarak jauh.
Annika Backstrom
22
Perhatikan bahwa git remote pruneini adalah cara yang agak usang untuk menghapus cabang pelacakan jarak jauh yang sudah usang, cara yang lebih baru untuk melakukannya adalah dengan menggunakan git fetch --pruneatau git fetch -p.
1
@RRMadhav, memang Anda tidak akan melihat cabang yang dihapus setelah menghapusnya karena referensi ke cabang jauh akan dihapus untuk Anda secara lokal. Orang lain di tim Anda yang telah memeriksa cabang itu akan tetap memiliki referensi itu dan akan tetap melihatnya kecuali mereka memangkas cabang tersebut.
pfrenssen
362

Jika Anda ingin menghapus cabang, pertama checkout ke cabang selain cabang yang akan dihapus.

git checkout other_than_branch_to_be_deleted

Menghapus cabang lokal:

git branch -D branch_to_be_deleted

Menghapus cabang jarak jauh:

git push origin --delete branch_to_be_deleted
Praveen Hiremath
sumber
261
git branch -D <name-of-branch>
git branch -D -r origin/<name-of-branch>
git push origin :<name-of-branch>
Felipe
sumber
7
Catatan yang -D memaksa penghapusan. Itu selalu lebih baik untuk digunakan -d, yang akan mengingatkan jika Anda perlu melakukan sesuatu yang berbahaya.
Jonathon Reinhart
13
ahahah :) terserah Anda: gunakan -d jika Anda ingin melihat git menangis atau -D jika Anda ingin menangis.
Felipe
225

Ini sederhana: Jalankan saja perintah berikut:

Untuk menghapus cabang Git baik secara lokal maupun jarak jauh, pertama-tama hapus cabang lokal menggunakan perintah ini:

git branch -d example

(Ini exampleadalah nama cabang.)

Dan setelah itu, hapus cabang jarak jauh menggunakan perintah ini:

git push origin :example
Islam yang baik
sumber
199

Pendekatan lain adalah:

git push --prune origin

PERINGATAN: Ini akan menghapus semua cabang jarak jauh yang tidak ada secara lokal. Atau lebih komprehensif,

git push --mirror

akan secara efektif membuat repositori jarak jauh terlihat seperti salinan lokal repositori (kepala lokal, remote dan tag dicerminkan pada remote).

imanuelcostigan
sumber
1
git push - asal prune tidak melakukan apa pun untuk saya di gitlab: git clone git: //repo.git; cabang git -d -r asal / beberapa cabang; git push --prune asal; hasil: Semuanya terbaru; git fetch; mengembalikan cabang yang dihapus secara lokal; git push --mirror; sekarang mereka benar-benar hilang!
eMBee
166

Saya menggunakan yang berikut ini di pengaturan Bash saya :

alias git-shoot="git push origin --delete"

Maka Anda dapat menelepon:

git-shoot branchname
crizCraig
sumber
11
Saya akhirnya hanya menambahkan alias "shoot" ke .gitconfig shoot = push origin --delete
hdost
Jika asal Anda adalah simpanan Atlassian dan cabang ditetapkan sebagai default, Anda akan mendapatkan kesalahan "Secara default, menghapus cabang saat ini ditolak ...". Saya harus mengubah cabang default di Stash untuk menunjuk ke cabang lain sebelum saya bisa menghapus.
neoscribe
Ini sangat sederhana seperti yang telah Anda lakukan, tetapi fyi git juga memungkinkan Anda membuat perintah khusus. Masukkan git push origin --delete $1file di jalur Anda dipanggil git-shootdan git shoot branchnameakan bekerja juga.
mahemoff
132

Hapus secara lokal:

Untuk menghapus cabang lokal, Anda dapat menggunakan:

git branch -d <branch_name>

Untuk menghapus cabang secara paksa, gunakan -Dsebagai ganti -d.

git branch -D <branch_name>

Hapus dari jarak jauh:

Ada dua opsi:

git push origin :branchname

git push origin --delete branchname

Saya sarankan Anda menggunakan cara kedua karena lebih intuitif.

Rahul Gupta
sumber
129

Sejak Januari 2013, GitHub menyertakan a Delete branch tombol di sebelah setiap cabang di halaman "Cabang" Anda.

Posting blog yang relevan: Buat dan hapus cabang

Nacho Coloma
sumber
3
Saya hanya mulai menggunakan Github tahun ini, jadi saya bertanya-tanya mengapa ini adalah pertanyaan yang berperingkat sangat tinggi, dan mengapa tidak ada jawaban teratas yang menyarankan untuk hanya menghapusnya dari antarmuka web Github! Menarik bahwa itu hanya tambahan baru.
Cam Jackson
6
Saya akan menunjukkan ini. Perhatikan bahwa tombol tidak akan menghapus cabang lokal Anda ... lihat jawaban ini untuk bagaimana melakukannya: stackoverflow.com/a/10999165/901641
ArtOfWarfare
127

Jika Anda ingin menyelesaikan kedua langkah ini dengan satu perintah, Anda dapat membuat alias untuk itu dengan menambahkan di bawah ini ke ~/.gitconfig:

[alias]
    rmbranch = "!f(){ git branch -d ${1} && git push origin --delete ${1}; };f"

Atau, Anda dapat menambahkan ini ke konfigurasi global Anda dari baris perintah menggunakan

git config --global alias.rmbranch \
'!f(){ git branch -d ${1} && git push origin --delete ${1}; };f'

CATATAN : Jika menggunakan -d(huruf kecil d), cabang hanya akan dihapus jika telah digabung. Untuk memaksa penghapusan terjadi, Anda harus menggunakan -D(huruf besar D).

Ryan Kohn
sumber
6
Ini yang saya cari. Alias ​​fungsi shell saya sendiri tidak berfungsi (EOF tak terduga) dan saya tidak tahu mengapa, tapi ini berhasil! Satu-satunya perubahan yang saya lakukan adalah mengganti &&dengan ;sehingga bahkan jika perintah pertama gagal yang kedua masih akan mengeksekusi (kadang-kadang hanya lokal atau hanya ada jarak jauh).
user1021726
116

Untuk menghapus cabang Anda secara lokal dan jarak jauh

  • Checkout ke cabang utama - git checkout master

  • Hapus cabang jarak jauh Anda - git push origin --delete <branch-name>

  • Hapus cabang lokal Anda - git branch --delete <branch-name>

mfathy00
sumber
113

Anda juga dapat melakukan ini menggunakan git remote prune origin

$ git remote prune origin
Pruning origin
URL: [email protected]/yourrepo.git
 * [pruned] origin/some-branchs

Ini memangkas dan menghapus cabang pelacakan jarak jauh dari git branch -rdaftar.

Nickleefly
sumber
108

Selain jawaban lain, saya sering menggunakan alat git_remote_branch . Ini adalah instalasi tambahan, tetapi memberi Anda cara yang nyaman untuk berinteraksi dengan cabang jarak jauh. Dalam hal ini, untuk menghapus:

grb delete branch

Saya menemukan bahwa saya juga menggunakan perintah publishdan trackcukup sering.

u2622
sumber
98

Perintah satu baris untuk menghapus lokal, dan jarak jauh :

D=branch-name; git branch -D $D; git push origin :$D

Atau tambahkan alias di bawah ini ke ~ / .gitconfig Anda . Pemakaian:git kill branch-name

[alias]
    kill = "!f(){ git branch -D \"$1\";  git push origin --delete \"$1\"; };f"
Vinnie James
sumber
17
⚠️ Gunakan git branch -Ddengan hati-hati dalam sebuah skrip, karena itu memaksa-menghapus cabang tanpa memeriksa itu telah digabung. Gunakan -duntuk aman.
caesarsol
94

Menghapus Cabang

Mari kita asumsikan pekerjaan kita pada "form kontak" cabang sudah selesai dan kita sudah mengintegrasikannya ke dalam "master". Karena kita tidak membutuhkannya lagi, kita dapat menghapusnya (secara lokal):

$ git branch -d contact-form

Dan untuk menghapus cabang jarak jauh:

git push origin --delete contact-form
Ulysses Alves
sumber
87

Hapus cabang jarak jauh

git push origin :<branchname>

Hapus cabang lokal

git branch -D <branchname>

Hapus langkah cabang lokal:

  1. checkout ke cabang lain
  2. hapus cabang lokal
jayxhj
sumber
3
Apakah penghapusan cabang jarak jauh membutuhkan "git push" sesudahnya?
Samitha Chathuranga
@SamithaChathuranga no, git push origin :<branchname>sudah mendorong cabang 'kosong` ke jarak jauh (karenanya menghapus cabang jarak jauh)
Michał Szajbe
86

Katakan saja:

git branch -d <branch-name>
git push origin :<branch-name>
piyushmandovra
sumber
Ini berfungsi jika itu adalah cabang Anda sendiri. Tetapi jika Anda memangkas semua cabang yang tidak dibutuhkan dalam repo (beberapa di antaranya bukan milik Anda) tidak akan cukup
Kermit_ice_tea
83
git push origin --delete <branch Name>

lebih mudah diingat daripada

git push origin :branchName
Smila
sumber
81

Sekarang Anda dapat melakukannya dengan aplikasi GitHub Desktop .

Setelah meluncurkan aplikasi

  1. Klik pada proyek yang berisi cabang
  2. Beralih ke cabang yang ingin Anda hapus

    Berpindah cabang

  3. Dari menu "Cabang", pilih, "Batalkan publikasi ...", agar cabang dihapus dari server GitHub.

    Batalkan publikasi cabang

  4. Dari menu "Cabang", pilih, 'Hapus " branch_name " ...', untuk menghapus cabang dari mesin lokal Anda (AKA mesin yang sedang Anda kerjakan)

    Hapus cabang lokal

Eric
sumber
15
Saya tidak downvote, tetapi pemikiran saya adalah bahwa itu tidak membantu Pertanyaannya jelas meminta jawaban jenis perintah yang lebih banyak tanpa harus menggunakan program eksternal, jika orang mengklik di sini, mereka kemungkinan tidak akan mencari github untuk cara desktop.
Daemedeor
12
@Daemedeor, saya tidak setuju. Pada 2010 ketika OP mengajukan pertanyaan, cara UI untuk melakukannya tidak ada dan satu-satunya opsi adalah baris perintah. Untuk menunjukkan bahwa Anda menginginkan opsi hanya baris perintah, maka harus dinyatakan dalam pertanyaan atau dengan tag, antarmuka-baris perintah , yang dalam hal ini tidak ada.
Eric
3
Perintah git untuk menghapus cabang jarak jauh menyebalkan dan saya cenderung melupakannya (baru dan lama). Untungnya ada alat GUI yang memiliki opsi. Git Gui, TortoiseGit dan GitHub Desktop memilikinya - Saya berharap Git Extensions memiliki fungsi ini juga. Bagaimanapun, yang saya ingat adalah memulai Git Gui dari dalam Git Extensions ketika saya perlu menghapus cabang jarak jauh.
vezenkov
81

Ini sangat sederhana:

Untuk menghapus cabang jarak jauh

git push -d origin <branch-name>

Atau

git push origin :<branch-name>

Untuk menghapus cabang lokal

git branch -D <branch-name>
Vivek Maru
sumber
2
Saya perlu menggunakan --deletealih-alih -dmenghapus cabang jarak jauh.
ZakJ
-dopsi adalah alias untuk --deletedan jika --deleteberfungsi maka -dharus juga berfungsi, jika Anda ingin menghapus cabang, Anda dapat menggunakan -Dsebagai ganti -datau --delete.
Vivek Maru
78

Untuk menghapus secara lokal - (normal)

git branch -d my_branch

Jika cabang Anda dalam proses rebasing / penggabungan dan itu tidak dilakukan dengan benar, itu berarti Anda akan mendapatkan kesalahan, Rebase/Merge in progress , sehingga dalam hal ini, Anda tidak akan dapat menghapus cabang Anda.

Jadi Anda harus menyelesaikan rebasing / penggabungan. Jika tidak, Anda dapat melakukan penghapusan paksa dengan menggunakan,

git branch -D my_branch

Untuk menghapus di remote :

git push --delete origin my_branch

Anda dapat melakukan hal yang sama menggunakan:

git push origin :my_branch   # Easy to remember both will do the same.

Representasi grafis:

Masukkan deskripsi gambar di sini

Mohideen bin Mohammed
sumber
68

Ini tidak akan berfungsi jika Anda memiliki tag dengan nama yang sama dengan cabang di remote:

$ git push origin :branch-or-tag-name
error: dst refspec branch-or-tag-name matches more than one.
error: failed to push some refs to '[email protected]:SomeName/some-repo.git'

Dalam hal ini Anda perlu menentukan bahwa Anda ingin menghapus cabang, bukan tag:

git push origin :refs/heads/branch-or-tag-name

Demikian pula, untuk menghapus tag, bukan cabang yang akan Anda gunakan:

git push origin :refs/tags/branch-or-tag-name
Greg
sumber
1
Ini baik-baik saja, tetapi orang-orang seharusnya tidak memberi nama cabang dan tag mereka dengan nama dan skema penamaan yang sama.
3
Skenario saya adalah saya mengubah cabang menjadi sebuah tag dan masuk akal jika tag tersebut memiliki nama yang sama dengan cabang. Dengan mengkonversi maksud saya menggabungkan cabang B ke A dan menandai komit terakhir di cabang B dengan tag B sehingga setelah menghapus cabang B itu masih dapat dengan mudah dipulihkan dengan hanya memeriksa tag B.
Greg
53

Banyak jawaban lain akan mengarah pada kesalahan / peringatan. Pendekatan ini adalah bukti yang relatif bodoh meskipun Anda mungkin masih perlu git branch -D branch_to_deletejika tidak sepenuhnya digabung menjadi some_other_branch, misalnya.

git checkout some_other_branch
git push origin :branch_to_delete
git branch -d branch_to_delete

Pemangkasan jarak jauh tidak diperlukan jika Anda menghapus cabang jarak jauh. Ini hanya digunakan untuk mendapatkan remote terbaru yang tersedia di repositori yang Anda lacak. Saya telah mengamati git fetchakan menambahkan remote, bukan menghapusnya. Ini adalah contoh kapangit remote prune origin akan melakukan sesuatu:

Pengguna A melakukan langkah-langkah di atas. Pengguna B akan menjalankan perintah berikut untuk melihat cabang jarak jauh yang terbaru:

git fetch
git remote prune origin
git branch -r
Brandon Cook
sumber
51

Saya muak dengan googling untuk jawaban ini, jadi saya mengambil pendekatan yang mirip dengan jawaban yang diposting crizCraig sebelumnya.

Saya menambahkan yang berikut ke profil Bash saya:

function gitdelete(){
    git push origin --delete $1
    git branch -D $1
}

Lalu setiap kali saya selesai dengan cabang (digabung menjadi master, misalnya) saya menjalankan yang berikut di terminal saya:

gitdelete my-branch-name

... yang kemudian dihapus my-branch-namedari origindan juga secara lokal.

arthurakay
sumber
7
memperluas ini, --delete "$@"dan -D "$@"bukannya $1akan menanganinya untuk beberapa cabang.
Kunl
3
Saya sarankan menjalankan git branch -d(dengan huruf kecil 'd') terlebih dahulu untuk memastikan perubahan telah digabungkan, dan kemudian mendorong jika berhasil (dimasukkan &&di antara perintah)
bryn
49

Sebelum dieksekusi

git branch --delete <branch>

pastikan Anda menentukan terlebih dahulu apa nama persis cabang jauh dengan mengeksekusi:

git ls-remote

Ini akan memberi tahu Anda apa yang harus dimasukkan persis untuk <branch>nilai. ( branchpeka huruf besar kecil!)

jbooker
sumber
46

Menggunakan:

git push origin :bugfix  # Deletes remote branch
git branch -d bugfix     # Must delete local branch manually

Jika Anda yakin ingin menghapusnya, jalankan

git branch -D bugfix

Sekarang untuk membersihkan jalankan remote cabang dihapus

git remote prune origin
pengguna
sumber