Berikut adalah perintah yang saya gunakan dari cabang utama
git branch experiment
git checkout experiment
Lalu saya membuat beberapa perubahan pada file saya, melakukan perubahan, dan mendorong cabang baru ke GitHub.
git commit . -m 'changed files'
git push -u origin experiment
Kemudian saya memutuskan untuk menggabungkan cabang percobaan saya ke cabang utama.
git checkout master
git merge experiment
Akhirnya saya mendorong perubahan ke GitHub.
git push -u origin master
Semua berjalan dengan baik sampai saya mencoba menghapus cabang percobaan saya menggunakan
git branch -d experiment
Saya mendapat pesan kesalahan yang error: The branch 'experiment' is not fully merged.
saya sedikit baru untuk git, dan saya tidak tahu berapa banyak lagi saya bisa menggabungkan dua cabang. Apa yang kulewatkan di sini?
git
git-branch
mellowsoon
sumber
sumber
git commit --amend
squash
: stackoverflow.com/q/41946475/109941Jawaban:
Catatan Penulisan berubah dalam menanggapi komitmen. Terima kasih @slekse
Itu bukan kesalahan, itu peringatan. Ini berarti cabang yang akan Anda hapus berisi komit yang tidak dapat dijangkau dari: cabang upstreamnya, atau HEAD (saat ini memeriksa revisi). Dengan kata lain, saat Anda mungkin kehilangan komitmen¹.
Dalam praktiknya itu berarti bahwa Anda mungkin diubah, diubah atau disaring melakukan dan tampaknya tidak sama.
Oleh karena itu Anda dapat menghindari peringatan dengan memeriksa cabang yang berisi komit yang tidak Anda rujuk dengan menghapus cabang lainnya.²
Anda akan ingin memverifikasi bahwa Anda sebenarnya tidak kehilangan komitmen penting:
Ini akan memberi Anda daftar nonshared antara cabang. Jika Anda penasaran, mungkin ada perbedaan tanpa
--cherry-pick
dan perbedaan ini bisa menjadi alasan peringatan yang Anda dapatkan:¹ mereka benar-benar hanya sampah yang dikumpulkan setelah beberapa saat, secara default. Juga,
git-branch
perintah tidak memeriksa pohon revisi dari semua cabang . Peringatan itu ada untuk menghindari kesalahan yang jelas.² (Preferensi saya di sini adalah memaksa penghapusan saja, tetapi Anda mungkin ingin memiliki jaminan tambahan).
sumber
Seperti yang ditunjukkan oleh Drew Taylor, penghapusan cabang dengan -d hanya mempertimbangkan HEAD saat ini dalam menentukan apakah cabang tersebut "sepenuhnya digabung". Ini akan mengeluh bahkan jika cabang tersebut digabung dengan beberapa cabang lainnya. Pesan kesalahan pasti bisa lebih jelas dalam hal ini ... Anda bisa checkout cabang gabungan sebelum menghapus, atau cukup gunakan git branch -D. Capital -D akan mengganti cek sepenuhnya.
sumber
origin/master
?) Saya kira memeriksaorigin/master
dulu tidak terlalu berat, tetapi rasanya seperti aliran aneh - mengapa saya perlu memeriksaorigin/master
secara lokal hanya untuk Anda memverifikasi bahwa perubahan saya digabung di sana?Saya mencoba jawaban sehe dan tidak berhasil.
Untuk menemukan komit yang belum digabungkan cukup gunakan:
sumber
Saya memiliki ini terjadi pada saya hari ini, karena saya menggabungkan cabang fitur pertama saya kembali ke master. Seperti yang dikatakan beberapa orang di utas lain tentang SO, triknya beralih kembali ke master sebelum mencoba menghapus cabang. Setelah kembali menjadi master, git dengan senang hati menghapus cabang tanpa peringatan.
sumber
Git memperingatkan bahwa Anda mungkin kehilangan riwayat dengan menghapus cabang ini. Meskipun itu tidak akan langsung menghapus komit, beberapa atau semua komit di cabang akan menjadi tidak terjangkau jika mereka bukan bagian dari cabang lain juga.
Agar cabang
experiment
dapat "sepenuhnya digabung" ke cabang lain, ujung komitnya harus merupakan leluhur dari ujung cabang lainnya, membuat komit dalamexperiment
subset cabang lainnya. Ini membuatnya aman untuk dihapusexperiment
, karena semua komitnya akan tetap menjadi bagian dari sejarah repositori melalui cabang lain. Itu harus "sepenuhnya" digabung, karena mungkin sudah digabung beberapa kali, tetapi sekarang telah menambahkan komitmen sejak penggabungan terakhir yang tidak terdapat di cabang lain.Git tidak memeriksa setiap cabang lain di repositori; hanya dua:
"Cabang hulu" untuk
experiment
, seperti dalam kasus Anda, mungkinorigin/experiment
. Jikaexperiment
sepenuhnya digabung dalam cabang saat ini, maka Git menghapusnya tanpa keluhan. Jika tidak, tetapi sepenuhnya digabung dalam cabang hulu, maka Git melanjutkan dengan peringatan yang tampak seperti:Di mana
xxxxxxxx
menunjukkan id komit. Digabung penuh di hulu menunjukkan bahwa komitexperiment
telah didorong ke repositori asal, sehingga bahkan jika Anda kehilangannya di sini, mereka setidaknya dapat disimpan di tempat lain.Karena Git tidak memeriksa cabang lain, mungkin aman untuk menghapus cabang karena Anda tahu itu sepenuhnya digabung menjadi cabang lain; Anda dapat melakukan ini dengan
-D
opsi seperti yang ditunjukkan, atau beralih ke cabang itu terlebih dahulu dan biarkan Git mengkonfirmasi status yang sepenuhnya digabung untuk Anda.sumber
untuk melihat perubahan yang tidak digabungkan, saya melakukan ini:
Catatan: Ini menunjukkan perubahan
master
yang tidak ada diexperiment
.Jangan lupa untuk:
Setelah selesai, lihatlah.
sumber
man git-reset
dan perintah git reset sudah cukup untuk pulih dari masalah negara.Solusi termudah dengan Penjelasan (solusi dua kali lipat) (menghadapi masalah sebelumnya)
Masalahnya adalah:
1- Saya tidak bisa menghapus cabang
2- Terminal terus menampilkan pesan peringatan bahwa ada beberapa komit yang belum disetujui
3 - mengetahui bahwa saya memeriksa master dan cabang dan semuanya identik (terkini)
larutan:
Penjelasan:
ketika cabang Anda terhubung ke cabang jarak jauh hulu (di Github, bitbucket atau apa pun), Anda perlu menggabungkan (mendorong) ke master, dan Anda perlu mendorong perubahan baru (berkomitmen) ke repo jarak jauh (Github, bitbucket atau terserah) dari cabang,
apa yang saya lakukan dalam kode saya adalah bahwa saya beralih ke master, kemudian menggabungkan cabang ke dalamnya (untuk memastikan mereka identik pada mesin lokal Anda), kemudian saya beralih ke cabang lagi dan mendorong pembaruan atau perubahan ke online jarak jauh repo menggunakan "git push".
setelah itu, saya beralih ke master lagi, dan mencoba menghapus cabang, dan masalah (pesan peringatan) hilang, dan cabang berhasil dihapus
sumber
Anda cukup mencari tahu:
--cherry
Opsi adalah sinonim untuk--right-only --cherry-mark --no-merges
halaman manual git-log berkata
FYI.
--cherry-pick
menghilangkan komitmen yang setara tetapi--cherry-marks
tidak. Sangat berguna untuk menemukan rebase dan memaksa perubahan yang diperbarui antara cabang publik upstream dan co-workingsumber
Saya tidak memiliki cabang hulu di git lokal saya. Saya telah membuat cabang lokal dari master, git checkout -b mybranch. Saya membuat cabang dengan bitbucket GUI di hulu git dan mendorong cabang lokal saya (mybranch) ke cabang hulu itu. Setelah saya melakukan git mengambil git lokal saya untuk mengambil cabang hulu, saya bisa melakukan cabang git -d mybranch.
sumber
Saya percaya bendera
--force
adalah apa yang benar-benar Anda cari. Cukup gunakangit branch -d --force <branch_name>
untuk menghapus cabang secara paksa.sumber