Pertanyaan Buat patch git untuk komit spesifik


Saya perlu menulis skrip yang membuat tambalan untuk daftar nomor komitmen SHA1.

Saya mencoba menggunakan git format-patch <the SHA1>, tetapi itu menghasilkan patch untuk setiap commit sejak SHA1 itu. Setelah beberapa ratus tambalan dihasilkan, saya harus membunuh prosesnya.

Apakah ada cara untuk membuat patch hanya untuk SHA1 tertentu?


945
2017-07-12 00:35


asal


Jawaban:


Mencoba:

git format-tambalan -1 <sha>

atau

git format-patch -1 HEAD

Terapkan tambalan dengan perintah:

git am < file.patch

1539
2017-07-12 00:43



Untuk menghasilkan tambalan dari commit paling atas dari hash sha1 spesifik:

git format-patch -<n> <SHA1>

10 patch terakhir dari kepala dalam satu file tambalan:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch

234
2018-04-23 14:34



Katakanlah Anda telah melakukan id 2 setelah commit 1 Anda akan dapat menjalankan:

git diff 2 1 > mypatch.diff

di mana 2 dan 1 adalah hash SHA.


61
2017-07-12 00:42



Perintah ini (seperti yang sudah disarankan oleh @Naftuli Tzvi Kay):

git format-patch -1 HEAD

Menggantikan HEAD dengan hash atau rentang tertentu.

akan menghasilkan file patch untuk commit terbaru yang diformat menyerupai format kotak surat UNIX.

-<n> - Siapkan tambalan dari commit paling atas.

Kemudian Anda dapat menerapkan kembali file tambalan dalam format kotak surat dengan:

git am -3k 001*.patch

Lihat: man git-format-patch.


50
2017-07-06 13:52



git format-patch commit_Id~1..commit_Id  
git apply patch-file-name

Solusi cepat dan sederhana.


17
2018-05-04 16:52



Untuk menghasilkan jalur dari komit spesifik (bukan komit terakhir):

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE

5
2018-05-24 07:26



Jika Anda ingin memastikan patch (komit tunggal) akan diterapkan di atas komitmen tertentu, Anda dapat menggunakan opsi git 2.9 (Juni 2016) yang baru git format-patch --base

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

Lihat komit bb52995, lakukan 3de6651, lakukan fa2ab86, lakukan ded2c09 (26 Apr 2016) oleh Xiaolong Ye (``).
(Digabung oleh Junio ​​C Hamano - gitster - di lakukan 72ce3ff, 23 Mei 2016) 

format-patch: tambahkan '--base'Opsi untuk merekam info dasar pohon

Maintainers atau penguji pihak ketiga mungkin ingin mengetahui pohon dasar yang tepat   seri patch berlaku untuk. Ajarkan format git-tempelkan '--base' pilihan   untuk merekam info dasar pohon dan menambahkannya di akhir yang pertama   pesan (baik surat lamaran atau patch pertama dalam seri).

Info base tree terdiri dari "basis commit", yang dikenal   komit yang merupakan bagian dari bagian stabil dari semua orang dalam sejarah proyek   lain bekerja off, dan nol atau lebih "prasyarat patch", yang   patch terkenal dalam penerbangan yang belum menjadi bagian dari "basis commit"   yang perlu diterapkan di atas "komitmen dasar" dalam urutan topologi   sebelum tambalan bisa diterapkan.

"Komitmen dasar" ditampilkan sebagai "base-commit: "Diikuti oleh 40-hex dari   nama objek komit.
  "Prasyarat patch" ditampilkan sebagai "prerequisite-patch-id: "diikuti oleh" patch id 40-hex ", yang dapat diperoleh dengan melewati patch melalui"git patch-id --stable"perintah.


5
2018-06-01 06:29



jika Anda hanya ingin diff file yang ditentukan, Anda dapat:

git diff master 766eceb - koneksi /> 000-mysql-connector.patch


1
2018-01-17 09:40



Apa cara untuk membuat patch hanya untuk SHA1 tertentu?

Ini cukup sederhana:

Pilihan 1. git show commitID > myFile.patch

Pilihan 2. git commitID~1..commitID > myFile.patch

Catatan: Ganti commitIDdengan id komit aktual (kode commit SHA1).


0