Setelah melakukan penggabungan "sederhana" (satu tanpa konflik), git show
biasanya hanya menunjukkan sesuatu seperti
commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date: Tue Feb 22 00:27:17 2011 +0100
Merge branch 'testing' into master
Ini karena, untuk penggabungan, git show
menggunakan format diff gabungan yang menghilangkan file yang setuju dengan salah satu versi induk.
Apakah ada cara untuk memaksa git untuk tetap menunjukkan semua perbedaan dalam mode diff gabungan?
Melakukan git show -m
akan menunjukkan perbedaan (masing-masing menggunakan perbedaan berpasangan antara versi baru dan semua induk) tapi saya lebih suka memilikinya dengan perbedaan ditandai dengan +/- di kolom masing-masing seperti dalam mode gabungan.
Jawaban:
Tidak, tidak ada cara untuk melakukan ini
git show
. Tapi kadang-kadang tentu akan menyenangkan, dan mungkin akan relatif mudah diimplementasikan dalam kode sumber git (setelah semua, Anda hanya perlu mengatakannya untuk tidak memangkas apa yang dianggapnya sebagai output asing), sehingga patch untuk melakukannya mungkin akan diterima oleh pengelola git.Berhati-hatilah dengan apa yang Anda inginkan; menggabungkan cabang dengan perubahan satu baris yang bercabang tiga bulan yang lalu masih akan memiliki perbedaan besar versus jalur utama, sehingga perbedaan penuh seperti itu hampir sepenuhnya tidak membantu. Itu sebabnya git tidak menunjukkannya.
sumber
Lihatlah pesan komit:
perhatikan garis:
ambil kedua id tersebut dan balikkan. jadi untuk mendapatkan diff yang Anda inginkan, Anda akan melakukan:
untuk hanya menampilkan nama file yang diubah:
dan untuk mengekstraknya, Anda dapat menambahkan ini ke gitconfig Anda:
kemudian gunakan dengan melakukan:
sumber
git diff fc17405...ee2de56
- ini akan menunjukkan semua perubahan pada ee2de56 yang dapat dijangkau dari commit di fc17405, yang saya percaya adalah yang Anda inginkan. Perhatikan 3 titik, bukan dua.git log
, yang masih menunjukkan semua commit, seperti..
varian...
dan...
melakukan hal yang sama untuklog
, tetapi karenadiff
mereka berbeda !? Bagaimana cara saya mendapatkan daftar komitmen yang digabung ke cabang ini?Solusi yang lebih baik (disebutkan oleh @KrisNuttycombe):
untuk komit gabungan:
untuk menampilkan semua perubahan
ee2de56
yang dapat dicapai dari komitmen padafc17405
. Perhatikan urutan hash komit - sama seperti yang ditunjukkan pada info gabungan:Merge: fc17405 ee2de56
Perhatikan juga 3 titik,
...
bukan dua !Untuk daftar file yang diubah, Anda dapat menggunakan:
sumber
Anda bisa membuat cabang dengan HEAD diatur ke satu komit sebelum digabung. Kemudian, Anda dapat melakukan:
Ini akan bergabung, tetapi tidak berkomitmen. Kemudian:
sumber
Sepertinya dijawab di sini: https://public-inbox.org/git/[email protected]/
sumber
Saya pikir Anda hanya perlu 'git show -c $ ref'. Mencoba ini di repositori git pada a8e4a59 menunjukkan diff gabungan (karakter plus / minus di salah satu dari 2 kolom). Seperti yang disebutkan dalam manual git-show, cukup banyak delegasi untuk 'git diff-tree' sehingga opsi-opsi itu terlihat berguna.
sumber
git show -c $ref
menunjukkan output yang sama seperti yang saya kutip, yaitu tidak ada perbedaan.-c
memilih mode diff gabungan yang sangat mirip dengan mode default untuk gabungan komit yaitu '--cc', lihatgit help show
dangit help diff-tree
. Keduanya sama sekali menghilangkan file yang setuju dengan salah satu versi induk dari file itu.a8e4a59
memang tidak termasuk dalam kategori gabungan komit, maksud saya. Ini menggabungkan komit memang berisi satu file yang berbeda dari kedua versi induknya.Documentation/git-fast-import.txt
memiliki beberapa hal ditambahkan dari satu orangtua dan beberapa dari yang lain. Ini menghasilkan keluaran non-kosong darigit diff-tree --cc
. Namun, hanya perubahan dalam kasus "konflik" ini yang ditampilkan. Semua hasil gabungan "bersih", lihatgit show -m a8e4a59
, tidak ditampilkan sama sekali.git show -c
output. (man git-diff-tree
memang mengatakan "Lebih jauh, ini hanya berisi daftar file yang dimodifikasi dari semua orangtua." tetapi saya tentu saja tidak melihatnya.)dalam kasus Anda, Anda hanya perlu
atau hanya hash untuk Anda komit:
sumber
git merge-base HEAD^ HEAD^2
danHEAD^
danHEAD^2
dengan gaya yang sama seperti yang dilakukan untuk file yang digabungkan dengan konflik.Jika komit gabungan Anda adalah kom 0e1329e5, seperti di atas, Anda bisa mendapatkan perbedaan yang terkandung dalam gabungan ini dengan:
Saya harap ini membantu!
sumber
Jika Anda duduk di komit gabungan maka ini menunjukkan diffs:
git diff HEAD~1..HEAD
Jika Anda tidak bergabung dengan komit gabungan, ganti saja HEAD dengan komit gabungan. Metode ini sepertinya paling sederhana dan paling intuitif.
sumber
Anda dapat menggunakan perintah diff-tree dengan flag -c. Perintah ini menunjukkan kepada Anda file apa yang telah berubah di komit gabungan.
Saya mendapatkan deskripsi -c flag dari Git-Scm :
sumber
Saya membangun pendekatan tujuan umum untuk melakukan berbagai operasi berdasarkan komitmen gabungan.
Langkah Satu : Tambahkan alias ke git dengan mengedit
~/.gitconfig
:Langkah Dua : Di
~/.githelpers
, tentukan fungsi bash:Langkah Tiga : Untung!
Mungkin ada BANYAK ruang untuk perbaikan di sini, saya hanya mencoba ini bersama untuk melewati situasi yang menjengkelkan. Jangan ragu untuk mengejek sintaks dan / atau logika bash saya.
sumber