Bagaimana cara menerapkan tambalan yang dihasilkan dengan git format-tambalan?

221

Saya punya 2 git repositori lokal, keduanya menunjuk ke repositori jarak jauh yang sama.

Dalam satu repositori git, jika saya melakukannya git format-patch 1, bagaimana saya bisa menerapkan tambalan itu ke repositori lain?

silverburgh
sumber

Jawaban:

330

Catatan: Anda dapat terlebih dahulu melihat pratinjau yang akan dilakukan tambalan Anda:

Pertama-tama statistik:

git apply --stat a_file.patch

Kemudian jalankan kering untuk mendeteksi kesalahan:

git apply --check a_file.patch

Terakhir, Anda bisa menggunakan git amuntuk menerapkan tambalan sebagai komit: memungkinkan Anda untuk menambal tambalan yang diterapkan.
Ini bisa bermanfaat untuk referensi nanti.

git am --signoff < a_file.patch 

Lihat contoh di artikel ini :

Di git log Anda, Anda akan menemukan bahwa pesan komit berisi tag "Signed-off-by". Tag ini akan dibaca oleh Github dan yang lainnya untuk memberikan info berguna tentang bagaimana komit berakhir di kode.

Contoh

VONC
sumber
9
Catatan untuk diri sendiri: lencana emas Jawaban ke-200.
VonC
4
git am < somepatch.patchmenghasilkan "fatal: nama identitas kosong (untuk <>) tidak diizinkan". Adakah yang bisa menjelaskan kepada saya mengapa?
gromit190
@ gromit190 yang berarti Authortajuk buruk di tambalan, dan / atau Anda tidak git config user.{name,email}.
ulidtko
BAIK; git apply --checkmengatakan patch does not apply, dan git apply -3mengatakan repository lacks the necessary blob to fall back on 3-way merge.In git, rebitting commit sangat mudah; tetapi bagaimana orang rebase patch mereka di atas kode yang diperbarui?
ulidtko
1
@ulidtko Mungkin dengan stackoverflow.com/a/15375869/6309 ?
VonC
162
git apply name-of-file.patch
Jeff Dallien
sumber
25
Ini mungkin tidak menjawab pertanyaan terperinci yang asli tetapi menjawab pertanyaan dalam judul yang mengapa saya ada di halaman ini. Terima kasih!
Rock Lee
12
Saya mengerti ini adalah pertanyaan dan jawaban lama ... tapi saya pikir mungkin bermanfaat bagi sebagian orang untuk memahami perbedaan antara git berlaku dan git .
mgarey
1
git berlaku "[... path lengkap ke file ...] / name-of-file.patch"
Anton Lyhin
41

Atau, jika Anda menendang sekolah lama:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch
Dominic Cooney
sumber
3
Hanya agar Anda sadar: Itu tidak akan membuat komit, sehingga akan kehilangan pesan komit dan informasi penulis.
Caesar
22

Pertama, Anda harus mencatat tentang perbedaan antara git amdangit apply

Ketika Anda menggunakan git amAnda biasanya ingin menerapkan banyak tambalan. Jadi harus menggunakan:

git am *.patch

atau hanya:

git am

Git akan menemukan tambalan secara otomatis dan menerapkannya dalam urutan ;-)

UPD
Di sini Anda dapat menemukan cara membuat tambalan tersebut

Eugen Konkov
sumber
1
Penjelasan tentang perbedaan ini membantu saya menggunakan git apply.. dan di --reverse:-) 👍
Jordan Gee
22

Jika Anda ingin menerapkannya sebagai komit , gunakan git .

Jakub Narębski
sumber
1
Bagaimana Anda biasanya mendapatkan file mbox di tempat pertama?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
14

Jika Anda menggunakan JetBrains IDE (seperti IntelliJ IDEA, Android Studio, PyCharm), Anda dapat menyeret file patch dan meletakkannya di dalam IDE, dan sebuah dialog akan muncul, menampilkan konten patch. Yang harus Anda lakukan sekarang adalah mengklik "Terapkan tambalan", dan sebuah komit akan dibuat.

ice1000
sumber
1
Terima kasih untuk ini. Ini sangat berguna untuk semua orang. Ada jawaban yang diterima. tapi ini juga bermanfaat.
Lasitha Benaragama
1
@ambarox Tapi jawaban ini diturunkan sekali, saya tidak tahu mengapa
ice1000
1
mungkin seseorang berpikir bahwa satu-satunya cara untuk menerapkan tambalan adalah melalui baris perintah. : D saya memberi Anda upvote. salut kawan.
Lasitha Benaragama
1
@LasithaBenaragama - jenis. SO dimaksudkan tidak hanya membantu OP, tetapi juga semua orang yang mengikuti. Jawaban ini (walaupun bermanfaat) tidak memberikan solusi umum. Ini akan menjadi posting blog kecil yang luar biasa, tetapi bukan jawaban "SANGAT bagus". Akan menjelaskan downvote!
OldTinfoil
-2

Anda dapat menggunakan cmd yang disebutkan di bawah

git apply fileName.patch
Amit Sharma
sumber