Bagaimana Anda mengambil file git diff, dan menerapkannya ke cabang lokal yang merupakan salinan dari repositori yang sama?

492

Saya memiliki file .diff yang dibuat oleh rekan kerja, dan ingin menerapkan perubahan yang tercantum dalam file diff tersebut ke cabang lokal saya dari repositori yang sama persis. Saya tidak memiliki akses ke pc atau cabang pekerja yang digunakan untuk menghasilkan file diff ini.

Jelas saya bisa pergi baris demi baris dan mengetik ulang semuanya, tapi saya lebih suka tidak mengalami kesalahan manusia. Apa cara termudah untuk melakukan ini?

Mike_K
sumber

Jawaban:

747

Salin file diff ke root repositori Anda, dan kemudian lakukan:

git apply yourcoworkers.diff

Informasi lebih lanjut tentang applyperintah tersedia di halaman manualnya .

By the way: Cara yang lebih baik untuk bertukar seluruh komit dengan file adalah kombinasi dari perintah git format-patchpada pengirim dan kemudian git ampada penerima, karena itu juga mentransfer informasi kepengarangan dan pesan komit.

Jika aplikasi tambalan gagal dan jika komit diff dihasilkan dari sebenarnya dalam repo Anda, Anda dapat menggunakan -3opsi applyyang mencoba untuk menggabungkan perubahan.

Ini juga bekerja dengan pipa Unix sebagai berikut:

git diff d892531 815a3b5 | git apply
Philipp
sumber
3
Terima kasih atas jawabannya, tetapi itu menyebabkan kesalahan yang mengatakan, tambalan gagal: filename.php: 202 kesalahan: filename.php: tambalan tidak berlaku. Kabar baiknya adalah itu bukan nama file pertama dalam file, jadi setidaknya akan dapat memproses beberapa file. Adakah pikiran?
Mike_K
4
Anda juga tampaknya memiliki perubahan pada file tersebut yang menghentikan tambalan agar tidak berfungsi. Untuk menyelesaikan ini, Anda bisa mengkomit perubahan Anda, membuat cabang baru, reset ke komit di mana Anda dan rekan kerja Anda menyimpang, menerapkan tambalan, komit, dan kemudian menggabungkan dua cabang.
Philipp
3
@ orlybg Ketika Anda belum berkomitmen, lakukan git reset --harduntuk mengembalikan pohon kerja Anda ke komit terakhir. Ketika Anda sudah berkomitmen, tambahkan revisi yang ingin Anda kembalikan.
Philipp
5
@ orlybg Maaf, tapi kemudian Anda kacau. Git hanya membuat pos pemeriksaan yang bisa Anda kembalikan ketika Anda membuat komit. Itu sebabnya banyak panduan git merekomendasikan untuk melakukan lebih awal dan sering .
Philipp
4
@orlybg setidaknya, jalankan git stashsebelum Anda melakukan beberapa tindakan yang Anda mungkin ingin membalikkan setelah. Kemudian, Anda dapat mengembalikan simpanan Anda, dan melakukan di beberapa titik kemudian.
maurice