Saya memiliki cabang lama, yang ingin saya hapus. Namun, sebelum melakukan itu, saya ingin memeriksa bahwa semua komitmen yang dilakukan untuk cabang ini pada beberapa titik digabung menjadi beberapa cabang lainnya. Jadi, saya ingin melihat semua komit dibuat pada cabang saya saat ini yang belum diterapkan ke cabang lain [atau, jika ini tidak mungkin tanpa beberapa skrip, bagaimana seseorang melihat semua komit dalam satu cabang yang belum diterapkan ke cabang lain yang diberikan?].
git
branch
git-branch
sircolinton
sumber
sumber
Jawaban:
Anda mungkin hanya ingin
Ini akan mendaftar semua cabang yang berisi komit dari "branch-to-delete". Jika itu melaporkan lebih dari sekadar "branch-to-delete", cabang telah digabungkan.
Alternatif Anda benar-benar hanya hal-hal sintaks daftar ulang. misalnya
git log one-branch..another-branch
menunjukkan semua yangone-branch
perlu memiliki semuanyaanother-branch
.Anda juga mungkin tertarik
git show-branch
sebagai cara untuk melihat di mana.sumber
git branch --contains some-branch
hanya kembalisome-branch
, maka itu akan mengembalikan sesuatu, tetapi belum digabung.git log foo..bar
akan menampilkan komit antara bilah terbaru dan foo terbaru, tetapi tidak ada komit lain yang hilang dari masa lalu. Untuk melihat semuanya di bar tetapi tidak di foo, Anda harus menggunakan solusi @ jimmyorr.Untuk melihat daftar komit yang berada di satu cabang tetapi bukan yang lain, gunakan git log:
... yaitu, tampilkan log komit untuk semua komit pada oldbranch yang tidak pada newbranch. Anda dapat membuat daftar beberapa cabang untuk dimasukkan dan dikecualikan, misalnya
Catatan: pada Windows
^
adalah kunci pelarian, sehingga harus diloloskan dengan yang lain^
:sumber
^
awalan di sini membuatku bingung. Dalam konteks ini ini berarti mengecualikan cabang itu. Menggunakan^
sebagai akhiran akan menjadi referensi relatif ke induk yang melakukan dari cabang itu.gitk oldbranch ^newbranch --no-merges
(Diuji dengan git 1.8.1.1). Catatan tambahan, bagi saya^
berarti kepala HEAD inklusif dari cabangnewbranch
.Untuk menampilkan komit di oldbranch tetapi tidak di newbranch:
Untuk menunjukkan perbedaan dengan komit ini (perhatikan ada tiga titik):
Inilah dokumen dengan ilustrasi diagram https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
sumber
newbranch
atauoldbranch
, kita dapat melakukangit log ..oldbranch
ataugit log newbranch..
masing..
antara nama referensi Saya juga menggunakan--cherry-pick
opsi untuk menyembunyikan komit yang ada di kedua cabang tetapi memiliki hash yang berbeda karena mereka dipilih dari satu cabang ke cabang lainnya.Bagi mereka yang masih mencari jawaban sederhana, lihat git cherry . Ini membandingkan diffs yang sebenarnya daripada melakukan hash. Itu berarti mengakomodasi komitmen yang telah diambil atau ditebangi ceri.
Pertama checkout cabang yang ingin Anda hapus:
git checkout [branch-to-delete]
lalu gunakan git cherry untuk membandingkannya dengan cabang pengembangan utama Anda:
git cherry -v master
Contoh output:
Catatan:
-v
Bendera adalah untuk menyertakan pesan komit bersama dengan hash SHA.Baris dengan tanda '+' di depan ada di cabang untuk dihapus, tetapi bukan cabang master. Mereka yang '-' di depan memiliki komit yang setara dalam master.
Untuk HANYA komitmen yang tidak di master, kombinasikan pick cherry dengan grep:
git cherry -v master | grep "^\+"
Contoh output:
sumber
diff
utilitas unix untuk membandingkan berbagai file. Atau, Anda bisa membuat cabang sementara dan menghancurkan semua komit dalam yang mirip dengan apa yang Anda lakukan dengan cabang asli, dan kemudian menggunakan ini, yang saya pikir akan berhasil.Sementara beberapa jawaban yang diposting di sini akan membantu menemukan apa yang Anda cari, sub-perintah cabang git berikut adalah solusi yang lebih cocok untuk tugas Anda.
--merged digunakan untuk menemukan semua cabang yang dapat dihapus dengan aman, karena cabang-cabang itu sepenuhnya berisi HEAD.
Sementara dalam
master
satu dapat menjalankan perintah untuk menghitung cabang yang bisa dihapus dengan aman, seperti:sumber
Jawaban jimmyorr tidak bekerja di Windows. ini membantu untuk digunakan,
--not
bukan^
seperti:sumber
^
didukung pada Windows, namun kebutuhan untuk melarikan diri, yang, pada Windows, adalah (yang lain)^
:git log oldbranch ^^newbranch --no-merges
.Jika itu adalah satu (tunggal) cabang yang perlu Anda periksa, misalnya jika Anda ingin cabang 'B' sepenuhnya digabung menjadi cabang 'A', Anda bisa melakukan hal berikut:
git branch -d <branchname>
memiliki keamanan yang "Cabang harus sepenuhnya digabung dalam KEPALA."Perhatian : ini benar-benar menghapus cabang B jika digabungkan menjadi A.
sumber
Anda dapat menggunakan skrip sederhana ini untuk melihat komit yang tidak digabungkan
Anda juga dapat menggunakan alat git-wtf yang akan menampilkan status cabang
sumber
Cukup gunakan
git cherry
untuk memilih semua komit di cabangnewFeature42
misalnya:git cherry -v master newFeature42
sumber
Mulai untuk Membuat Permintaan Tarik melalui layanan hosting git yang Anda gunakan. Jika cabang telah sepenuhnya digabung ke cabang dasar, Anda tidak akan dapat membuat PR baru.
Anda tidak perlu benar-benar membuat permintaan tarik, cukup gunakan langkah pertama di mana Anda memilih cabang.
Misalnya, di GitHub:
Ini tidak menggunakan git pada baris perintah, tapi saya sering merasa terbantu menggunakan alat lain yang Anda inginkan dengan model mental yang jelas daripada mencoba mengingat perintah git misterius lainnya.
sumber