Misalkan kita memiliki aplikasi yang stabil.
Besok, seseorang melaporkan bug besar yang kami putuskan untuk diperbaiki segera. Jadi kami membuat cabang untuk perbaikan terbaru itu dari "master", kami beri nama "2011_Hotfix", dan kami dorong agar semua pengembang dapat berkolaborasi untuk memperbaikinya.
Kami memperbaiki bug, dan menggabungkan "2011_Hotfix" menjadi "master" serta ke cabang pengembangan saat ini. Dan dorong "tuan."
Apa yang kita lakukan dengan "2011_Hotfix" sekarang? Haruskah itu hanya duduk di sana sebagai cabang selamanya sampai akhir zaman atau kita sekarang harus menghapusnya, karena telah melayani tujuannya? Rasanya najis meninggalkan cabang di mana-mana, karena daftar cabang kemungkinan akan menjadi sangat panjang, yang sebagian besar bahkan tidak diperlukan lagi.
Jika itu harus dihapus, apa yang akan terjadi dengan sejarahnya? Apakah itu akan dipertahankan, meskipun cabang yang sebenarnya tidak lagi tersedia? Juga, bagaimana saya menghapus cabang jarak jauh?
sumber
Jawaban:
Anda dapat menghapus cabang dengan aman
git branch -d yourbranch
. Jika itu berisi perubahan yang tidak dihapus (mis., Anda akan kehilangan komit dengan menghapus cabang), git akan memberi tahu Anda dan tidak akan menghapusnya.Jadi, menghapus cabang gabungan adalah murah dan tidak akan membuat Anda kehilangan riwayat apa pun.
Untuk menghapus cabang jarak jauh, gunakan
git push origin :mybranch
, dengan anggapan nama jarak jauh Anda adalah asal dan cabang jarak jauh yang ingin Anda hapus bernama mybranch.sumber
master
, jadi itu membuat semuanya jauh lebih bersih.--no-merged
default? Saya mencobagit config --global --add branch.noMerged true
dan ditambahkan tetapi tidak ada bedanya.Yang perlu Anda lakukan adalah menandai apa pun yang Anda lepaskan. Pertahankan cabang saat Anda aktif berkembang.
Hapus cabang lama dengan
Hapus dari server dengan
atau sintaksis lama
yang bertuliskan "push nothing to branch_name at origin".
Yang mengatakan, selama DAG (grafik asiklik diarahkan) dapat menunjukkan itu, komit akan ada dalam sejarah.
Google "git-flow" dan itu mungkin memberikan lebih banyak wawasan tentang manajemen rilis, percabangan dan penandaan.
sumber
Karena pertanyaan memiliki tag "github", saya juga akan menambahkan ini: khususnya di Github , jika Anda menarik-meminta cabang dan digabung (baik melalui UI atau dengan menggabungkan cabang permintaan tarik), Anda tidak akan kehilangan data permintaan tarik (termasuk komentar), bahkan jika Anda menghapus cabang .
Konsekuensi dari ini: Jika Anda memasukkan permintaan tarikan sebagai bagian dari alur kerja Anda (yang berpadu manis dengan ulasan kode), Anda dapat menghapus cabang dengan aman segera setelah mereka digabungkan. Ini sangat biasa sehingga baru-baru ini Github menambahkan fitur (manis) yang muncul tombol "hapus cabang" tepat setelah Anda menggabungkan permintaan tarik.
Tetapi perlu diperhatikan bahwa masing-masing kelompok harus mengadopsi alur kerja yang paling cocok (dan itu mungkin atau mungkin tidak mengarah pada penghapusan cabang-cabang seperti itu). Tim kerja saya saat ini, misalnya, memangkas semua cabang yang tidak terkait dengan master atau penempatan (misalnya, produksi, pementasan, dll.) Segera setelah permintaan tarik mereka digabung, dan kami masih memiliki pelacakan penuh tentang bagaimana komitmen terkait dibentuk setiap peningkatan bertahap dari setiap produk.
Tentu saja tidak ada manajemen riwayat (menarik permintaan atau sebaliknya) menggantikan penandaan versi yang tepat (yang Anda lebih baik diotomatisasi dengan alat / skrip yang sama yang menyebarkan / mengemas suatu versi), sehingga Anda selalu dapat dengan cepat beralih ke apa pun yang kebetulan dilakukan oleh pengguna Anda. pada saat tertentu. Pemberian tag juga merupakan kunci untuk menyelesaikan masalah awal Anda: jika Anda menetapkan bahwa cabang mana pun yang digabungkan dengan cabang "pekerjaan" dapat dan harus dihapus, dan bahwa setiap cabang yang digabungkan dengan tag versi, "produksi", dll. Tidak boleh , Anda akan selalu memiliki perbaikan terbaru hidup sampai mereka diintegrasikan dalam versi masa depan.
sumber
Saya ingin menambahkan bahwa kerugian dari menghapus cabang adalah Anda akan memutuskan tautan apa pun ke cabang-cabang di GitHub (pertanyaan ini ditandai dengan github). Anda akan mendapatkan
404 Not Found
kesalahan untuk tautan tersebut. Inilah sebabnya saya mengubah tautan untuk mengarahkan ke komit atau tag setelah saya menghapus cabang di GitHub.Karena beberapa tautan tidak dapat diubah, seperti dalam email, saya sekarang menghindari hyperlink ke cabang GitHub sepenuhnya dan tautan ke komit atau tag sejak hari pertama.
Saya lebih suka menghapus cabang setelah digabung. Ini mencegah kekacauan visual dari daftar cabang yang panjang di repositori Anda. Cabang-cabang ini juga disebarkan ke semua garpu repositori.
Pertama saya menghapus cabang lokal saya. Ini mencegahnya agar tidak sengaja didorong kemudian.
Kemudian saya menghapus cabang pelacakan jarak jauh
Lalu saya menghapus cabang di GitHub. Saya menggunakan antarmuka web, tetapi perintah yang setara di bawah ini.
Bahkan jika cabang tidak pernah digabungkan, biasanya saya masih ingin menjaga komitmen sekitar untuk keturunan. Namun saya masih suka menghapus cabang. Untuk menyebarkan komit di sekitar dan agar tidak dimakan oleh pengumpul sampah, saya membuat tag beranotasi yang menunjuk ke komit yang sama dengan cabang yang dihapus.
Lalu saya mendorong tag ke github
sumber
Tampaknya Anda ingin menghapus
2011_Hotfix
cabang tanpa kehilangan riwayatnya. Saya akan membahas penghapusan pertama dan sejarah kedua.git
Metode penghapusan cabang biasa telah dijelaskan di atas, dan mereka bekerja seperti yang diharapkan.git
tidak memiliki perintah satu atau dua kata yang berarti, "Heigit
, hapus cabang lokal dan remote." Tetapi perilaku ini dapat ditiru melalui shell script. Misalnya, ambil skrip shell Zach Holman 'git-nuke' . Ini sangat sederhana:Masukkan ini dalam file yang dapat dieksekusi (mis.,
git-nuke
) Di salah satu$PATH
direktori Anda . Jika Anda tidak berada di2011_Hotfix
cabang, Anda hanya menjalankangit-nuke 2011_Hotfix
akan menghapus cabang lokal dan jauh. Ini jauh lebih cepat & sederhana - meskipun mungkin lebih berbahaya - daripada standargit
perintah .Kekhawatiran Anda tentang pelestarian sejarah adalah hal yang bagus. Dalam hal ini, Anda tidak perlu khawatir. Setelah Anda bergabung
2011_Hotfix
kemaster
, semua komit dari2011_Hotfix
akan ditambahkan kemaster
's sejarah commit. Singkatnya, Anda tidak akan kehilangan riwayat dari penggabungan sederhana.Saya punya satu kata lagi untuk ditambahkan yang mungkin di luar cakupan pertanyaan Anda, tetapi tetap relevan. Mari kita bayangkan bahwa ada 20 kecil, "sedang dalam proses" berkomitmen
2011_Hotfix
; namun, Anda hanya ingin satu komit lengkap untuk2011_Hotfix
ditambahkan kemaster
riwayat. Bagaimana Anda menggabungkan semua 20 komit kecil menjadi satu komit besar? Untungnya,git
memungkinkan Anda untuk mengkonsolidasikan banyak komit menjadi satu komit dengan menggunakangit-rebase
. Saya tidak akan menjelaskan di sini cara kerjanya; Namun, jika Anda tertarik, dokumentasinyagit-rebase
sangat bagus. Perhatikan bahwagit rebase
penulisan ulang riwayat, sehingga harus digunakan secara bijaksana, terutama jika Anda baru mengenalnya. Akhirnya,2011_Hotfix
skenario Anda adalah tentang tim pengembang, bukan pengembang solo. Jika anggota tim proyek digunakangit rebase
, bijaksana bagi tim untuk memiliki pedoman eksplisit tentang penggunaangit rebase
agar beberapa koboi pengembang tidak secara tidak sengaja merusak sejarah proyekgit
.sumber
Jika sudah berhasil digabungkan kembali dan bahkan mungkin ditandai maka saya akan mengatakan itu tidak ada gunanya lagi. Sehingga Anda bisa melakukannya dengan aman
git branch -d branchname
.sumber
Jika Anda ingin memangkas cabang lokal yang telah dihapus dari asal, Anda juga dapat memangkas, saat menggunakan
git fetch
sumber
Anda dapat menghapus cabang di semua UI web utama seperti github, BitBucket. Setelah menghapus cabang online, Anda dapat menghapus cabang lokal menggunakan
sumber