Saya perlu menulis skrip yang membuat tambalan untuk daftar nomor komit SHA1.
Saya mencoba menggunakan git format-patch <the SHA1>
, tetapi itu menghasilkan patch untuk setiap komit sejak SHA1 itu. Setelah beberapa ratus tambalan dibuat, saya harus mematikan prosesnya.
Apakah ada cara untuk menghasilkan tambalan hanya untuk SHA1 spesifik?
git apply --stat file.patch
# tampilkan statistik.git apply --check file.patch
# periksa kesalahan sebelum mendaftar.git am < file.patch
akhirnya terapkan tambalan.git am --keep-cr < mypatch.patch
git am -3 < file.patch
untuk menerapkan menggunakan gabungan tiga arah yang akan memungkinkan Anda menyelesaikan konflik menggunakangit mergetool
sesudahnya (atau mengedit secara manual) ditemukan di sini .git format-patch -1 <sha> path/to/file.js
Ini akan membuat tambalan hanya berisi diffs untuk file.jsUntuk menghasilkan tambalan dari komit paling atas dari hash sha1 tertentu:
10 tambalan terakhir dari kepala dalam satu file tambalan:
sumber
git format-patch -1 HEAD
akan menghasilkan tambalan untuk komit terbaru-2
menghasilkan tambalan untuk 2 komitmen terakhir adalah itu, dan satu hal lagi untuk klarifikasi adalah perintahnyagot format-patch -2 HEAD
sama dengan garisgit format-patch HEAD~2
Katakanlah Anda memiliki komit 2 setelah komit 1, Anda dapat menjalankan:
di mana 2 dan 1 adalah hash SHA.
sumber
git diff hash^ hash
. "hash ^" memberikan komit sebelumnya. (tapi, tentu saja, jawaban manojlds lebih baik)git show HEAD > mypatch.diff
ketika Anda sedang menjalankan komit, Anda harus melakukan hal yang sama.git diff 1 2
Perintah ini (seperti yang sudah disarankan oleh @ Naftuli Tzvi Kay ):
Ganti
HEAD
dengan hash atau rentang tertentu.akan menghasilkan file tambalan untuk komit terbaru yang diformat menyerupai format kotak surat UNIX.
Kemudian Anda dapat menerapkan kembali file tambalan dalam format kotak surat dengan:
Lihat:
man git-format-patch
.sumber
git
seperti patch berformat lainnya , setidaknya jika pengguna menerapkannya dengan cara yang benar.-k
bendera (git am -3
) memperbaiki formulir ini saya (tidak adaPATCH[0/10]
pesan komit). Git versi 2.20.1.windows.1Solusi cepat dan sederhana.
sumber
git apply --check patch-file-name
sebelum menerapkan tambalan. Ini akan membantu menghindari masalah.Jika Anda ingin memastikan tambalan (komit tunggal) akan diterapkan di atas komit tertentu, Anda dapat menggunakan opsi git 2.9 (Juni 2016) yang baru
git format-patch --base
Lihat komit bb52995 , komit 3de6651 , komit fa2ab86 , komit ded2c09 (26 Apr 2016) oleh Xiaolong Ye (``) .
(Digabung oleh Junio C Hamano -
gitster
- dalam commit 72ce3ff , 23 Mei 2016)Git 2.23 (Q3 2019) akan meningkatkan itu, karena "
--base
" opsi "format-patch
" menghitungpatch-ids
tambalan untuk prasyarat dengan cara yang tidak stabil, yang telah diperbarui untuk menghitung dengan cara yang kompatibel dengan "git patch-id --stable
".Lihat komit a8f6855 , komit 6f93d26 (26 Apr 2019) oleh Stephen Boyd (
akshayka
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 8202d12 , 13 Jun 2019)Sebelum Git 2.24 (Q4 2019), "
git format-patch -o <outdir>
" melakukan yang setara dengan "mkdir <outdir>
" tidak "mkdir -p <outdir>
", yang sedang diperbaiki.Lihat komit edefc31 (11 Okt 2019) oleh Bert Wesarg (
bertwesarg
) .(Digabung oleh Junio C Hamano -
gitster
- di commit f1afbb0 , 18 Okt 2019)Dengan Git 2.25 (Q1 2020), "
git rebase
" tidak berfungsi dengan baik ketikaformat.useAutoBase
variabel konfigurasi diatur, yang telah diperbaiki.Lihat komit cae0bc0 , komit 945dc55 , komit 700e006 , komit a749d01 , komit 0c47e06 (04 Des 2019) oleh Denton Liu (
Denton-L
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 71a7de7 , 16 Des 2019)sumber
Untuk menghasilkan jalur dari komit tertentu (bukan komit terakhir):
sumber
jika Anda hanya ingin diff file yang ditentukan, Anda dapat:
sumber
Dengan latar belakang lincah saya, saya akan menggunakan:
Tetapi saya sedang mempertimbangkan untuk menggunakan
git format-patch -1 $ID
sekarang.sumber
Apa cara menghasilkan tambalan hanya untuk SHA1 spesifik?
Sederhana saja:
Pilihan 1.
git show commitID > myFile.patch
Pilihan 2.
git commitID~1..commitID > myFile.patch
Catatan: Ganti
commitID
dengan id komit aktual (kode komit SHA1).sumber