Pertanyaan Cara menggabungkan komit spesifik di Git


Saya telah mencabang cabang dari repositori di GitHub dan melakukan sesuatu yang spesifik untuk saya. Sekarang saya menemukan repositori asli memiliki fitur bagus yang ada di HEAD.

Saya ingin menggabungkannya hanya tanpa commit sebelumnya. Apa yang harus saya lakukan? Saya sudah tahu cara menggabungkan semua commit:

git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push

795
2018-05-19 05:27


asal


Jawaban:


'git cherry-pick'seharusnya jawaban Anda di sini.

Terapkan perubahan yang diperkenalkan oleh komitmen yang ada.

Jangan lupa baca bdonlanjawaban tentang konsekuensi dari cherry-picking di posting ini:
"Tarik semua komit dari cabang, dorong komitmen tertentu ke yang lain", di mana:

A-----B------C
 \
  \
   D

menjadi:

A-----B------C
 \
  \
   D-----C'

Masalah dengan komitmen ini adalah bahwa git menganggap komitmen untuk menyertakan semua sejarah di hadapan mereka

Di mana C 'memiliki perbedaan SHA-1 ID.
  Demikian juga, cherry memetik komit dari satu cabang ke cabang lain pada dasarnya melibatkan menghasilkan tambalan, kemudian menerapkannya, sehingga kehilangan sejarah dengan cara itu juga.

Perubahan ID komit ini merusak fungsi penggabungan git di antara hal-hal lain (meskipun jika digunakan dengan hemat ada heuristik yang akan mencatatnya).
  Lebih penting lagi, itu mengabaikan dependensi fungsional - jika C benar-benar menggunakan fungsi yang didefinisikan dalam B, Anda tidak akan pernah tahu.


958
2018-05-19 05:35



Anda dapat menggunakan git cherry-pick untuk menerapkan komitmen tunggal dengan sendirinya ke cabang Anda saat ini.

Contoh: git cherry-pick d42c389f


528
2018-05-19 05:35



Mari coba ambil contoh dan pahami:

Saya memiliki cabang, katakanlah menguasai, menunjuk ke X <commit-id>, dan saya memiliki cabang baru yang menunjuk ke Y <sha1>.

Dimana Y <commit-id> = <master> branch commit - beberapa commit

Sekarang katakanlah untuk cabang Y, saya harus menutup rapat-rapat antara cabang master dan cabang baru. Di bawah ini adalah prosedur yang dapat kita ikuti:

Langkah 1:

git checkout -b local origin/new

di mana lokal adalah nama cabang. Nama apa pun bisa diberikan.

Langkah 2:

  git merge origin/master --no-ff --stat -v --log=300

Gabungkan commit dari cabang master ke cabang baru dan juga buat gabungan dari pesan log dengan deskripsi satu baris dari paling banyak <n> commit aktual yang sedang digabung.

Untuk informasi lebih lanjut dan parameter tentang Git bergabung, silakan merujuk ke:

git merge --help

Juga jika Anda perlu menggabungkan commit tertentu, maka Anda dapat menggunakan:

git cherry-pick <commit-id>

13
2018-05-27 05:29