Bagaimana cara kerja cabang Git? Bisakah saya menghapus cabang master?
22
Saya memiliki proyek yang memiliki 2 cabang, pengembangan dan produksi. Saya tidak menggunakan cabang master dan setiap kali saya menulisnya git statusmemberitahu saya seberapa jauh cabang saya dari master.
Ketika saya mencoba untuk menghapus cabang master, git branch -d masteria menghapusnya hanya pada repositori lokal saya dan bukan pada server git jarak jauh. Ada ide?
Di Git, cabang hanyalah daftar komit yang dipesan (alias: checkin). Sesuatu yang dapat sedikit membingungkan bagi pengguna baru adalah bahwa cabang tidak perlu memiliki nama (walaupun dalam sebagian besar keadaan Anda menginginkannya); dan tidak ada yang istimewa dari cabang tertentu ( mastercabang itu hanya cabang default yang dibuat untuk Anda ketika Anda menginisialisasi repositori).
Anda mungkin sudah mengetahui hal ini, tetapi Git berbeda dari beberapa sistem kontrol versi lain seperti "Subversion" yang populer, karena setiap "copy pekerjaan" (dalam bahasa Subversion) adalah repositori miliknya sendiri ... pada kenyataannya, tidak ada yang istimewa khusus tentang salinan tertentu; kecuali bahwa satu salinan secara umum telah disetujui sebagai yang "kanonik" yang digunakan untuk menyimpan produk akhir.
Jadi, kembali ke pertanyaan Anda ... repositori "kanonik" yang Anda kloning ketika Anda memulai salinan lokal Anda berisi cabang "master" secara default; dan itu macet di sekitar. Sekarang, jika Anda memiliki akses ke komputer yang berisi repositori master, Anda bisa masuk dan menjalankan:
git branch -d master
Namun, jika Anda tidak dapat melakukannya, Anda masih dapat melakukannya dari mesin lokal Anda. The git branchperintah memiliki -ropsi yang mempengaruhi repositori jauh. Dengan kata lain, menjalankan perintah berikut harus bekerja:
git branch -d -r master
Perhatikan bahwa dalam kedua kasus tersebut; Saya berasumsi bahwa mastertelah sepenuhnya digabungkan ke dalam sejarah pengembangan tempat salinan lokal Anda saat ini berada. Jika Anda belum pernah menggunakan mastersebelumnya (yaitu: Anda hanya pernah check in ke developmentatau production), Anda tidak perlu khawatir. Namun, jika Anda (atau orang lain) telah memeriksa beberapa hal master, maka Anda mungkin memiliki masalah. Anda dapat memaksa penghapusan dengan mengubah -dke -Ddalam perintah di atas; tapi saya sangat merekomendasikan memeriksa untuk melihat apa yang ada mastersebelumnya! Jika Anda tidak memiliki akses ke komputer jarak jauh, Anda mungkin tidak akan dapat memulihkannya!
Ngomong-ngomong; jika Anda (atau orang lain) baru mengenal Git, saya sangat merekomendasikan membaca Git dari Bawah ke Atas oleh John Wiegley . Walaupun saya menggunakan Git sendiri sebelum menemukan artikel ini, saya tidak begitu mengerti bagaimana cara kerjanya sampai saya membacanya. Ini cukup berguna!
Beberapa waktu sejak saya menulis komentar asli saya, perilaku git sedikit berubah. Pada git 1.7.12, git branch -d -r mastertidak lagi menghapus cabang jarak jauh - ia menghapus pengetahuan salinan lokal Anda tentang cabang jarak jauh. Lain kali Anda git fetch, cabang akan kembali! Sebaliknya, Anda ingin menjalankan git push origin :master. Pada dasarnya apa yang Anda lakukan di sini adalah mendorong cabang nol (nama cabang kosong di sebelah kiri :) di atas cabang jarak jauh (nama cabang di sisi kanan :), secara efektif menghapusnya.
mparker17
Harus juga dicatat bahwa ketika Anda mengkloning repositori Anda biasanya default untuk memeriksa master. Ini tergantung pada referensi HEAD di repositori yang Anda kloning. Jadi setelah master dihapus, pastikan HEAD menunjuk ke cabang yang Anda inginkan sebagai default.
Zitrax
Tautan Anda ke Git dari Bawah ke Atas telah mati, tetapi sepertinya ini adalah teks yang Anda maksudkan (?) Bisakah Anda mengonfirmasi dan mungkin memperbarui tautan dalam jawabannya?
ATAU Mapper
ATAU Mapper: Itulah teks yang saya maksudkan: terima kasih atas tautan baru! Saya telah memperbarui tautan dalam jawabannya.
mparker17
4
masteradalah cabang default untuk git. Saya tidak tahu mengapa ini sangat buruk bagi Anda ketika git memberi tahu Anda seberapa jauh dari master Anda, tetapi jika Anda ingin menghapus cabang pada repositori jarak jauh Anda, menghapusnya secara lokal tidak cukup. Coba ini sebagai gantinya:
git push origin :master
Ini tidak akan mendorong apa pun (bagian sebelum titik dua) ke server asal Anda dan menimpa master. Dengan kata lain, itu harus menghapus cabang master dari jarak jauh.
Saya mendapatkan: remote: error: menolak untuk menghapus cabang saat ini: refs / heads / master To github.com ***. Git! master [remote ditolak] master (penghapusan cabang saat ini dilarang) kesalahan: gagal mendorong beberapa referensi ke ' github.com ***. git'
git branch -d -r master
tidak lagi menghapus cabang jarak jauh - ia menghapus pengetahuan salinan lokal Anda tentang cabang jarak jauh. Lain kali Andagit fetch
, cabang akan kembali! Sebaliknya, Anda ingin menjalankangit push origin :master
. Pada dasarnya apa yang Anda lakukan di sini adalah mendorong cabang nol (nama cabang kosong di sebelah kiri:
) di atas cabang jarak jauh (nama cabang di sisi kanan:
), secara efektif menghapusnya.master
adalah cabang default untuk git. Saya tidak tahu mengapa ini sangat buruk bagi Anda ketika git memberi tahu Anda seberapa jauh dari master Anda, tetapi jika Anda ingin menghapus cabang pada repositori jarak jauh Anda, menghapusnya secara lokal tidak cukup. Coba ini sebagai gantinya:Ini tidak akan mendorong apa pun (bagian sebelum titik dua) ke server asal Anda dan menimpa master. Dengan kata lain, itu harus menghapus cabang master dari jarak jauh.
sumber