Saya ingin melakukan git pull
tetapi hanya sampai komit tertentu.
A->B->C->D->E->F (Remote master HEAD)
jadi misalkan local master
HEAD saya menunjuk ke B
, dan saya ingin menarik sampai E
. Apa yang harus saya lakukan ?
Ini tidak menarik komit tertentu, ini menarik ke komit tertentu.
git fetch
dangit merge E
.Jawaban:
git pull
tidak lain adalahgit fetch
diikuti olehgit merge
. Jadi yang bisa Anda lakukan adalahgit fetch remote example_branch
git merge <commit_hash>
sumber
git merge E
akan bergabungE
dengan semua leluhurnyaC
danD
(git tahu ituA
danB
tidak perlu digabungkan karena mereka sudah ada di cabang Anda). Jika Anda HANYA menginginkan perubahanE
maka Anda harus melakukannyagit cherry-pick E
.Pertama, ambil komit terbaru dari repo jarak jauh. Ini tidak akan mempengaruhi cabang lokal Anda.
Kemudian periksa cabang pelacakan jarak jauh dan lakukan git log untuk melihat komit
Ambil commit hash dari commit yang ingin Anda gabungkan (atau hanya ~ 5 karakter pertama) dan gabungkan commit itu ke master
sumber
git fetch
sebelum menulis omong kosong seperti itu. Selanjutnya, Anda harus membaca pertanyaan asli dan jawaban saya. Jika Anda mengikuti jawaban saya maka Anda tidak akan "kembali dalam sejarah" seperti yang saya perintahkan secara eksplisit kepada penggunagit checkout master
. Secara keseluruhan, tolong jangan posting sesuatu jika Anda kurang jelas 50% tentang apa yang Anda lakukan.git fetch origin
ambil asal secara eksplisit .Anda juga dapat menarik komit terbaru dan membatalkan sampai komit yang Anda inginkan:
Ganti
master
dengan cabang yang Anda inginkan.Gunakan git log untuk melihat komit mana yang ingin Anda kembalikan:
Secara pribadi, ini bekerja untuk saya lebih baik.
Pada dasarnya, yang dilakukannya adalah menarik komit terbaru, dan Anda secara manual mengembalikan komit satu per satu. Gunakan git log untuk melihat riwayat komit.
Poin bagus: Bekerja seperti yang diiklankan. Anda tidak harus menggunakan hash komit atau menarik cabang yang tidak dibutuhkan.
Poin buruk: Anda harus mengembalikan komitmen satu per satu.
PERINGATAN: Lakukan / simpan semua perubahan lokal Anda, karena dengan
--hard
Anda akan kehilangannya. Gunakan dengan resiko Anda sendiri!sumber
HEAD
sebelum kembali - dan saya tidak tahu apa yang akan terjadi jika Anda harus menyelesaikan konflik. Tetapi solusi ini memungkinkan untukgit pull --rebase
, dan bertentangan dengan apa yang dikatakan Anda dapat langsung mengatur ulang kembali keN
komit yang lalu dengangit reset --hard HEAD~N
(yaitu untuk 3 komit,git reset --hard HEAD~3
).Jika Anda menggabungkan komit ke cabang Anda, Anda harus mendapatkan semua riwayat di antaranya.
Mengamati:
sumber
Ini bekerja untuk saya:
misalnya
Ini menarik 28eb00, ff39e4, dan semua yang sebelumnya, tetapi tidak menarik f4d10ad. Ini memungkinkan penggunaan pull --rebase, dan pengaturan honoris pull di gitconfig Anda. Ini berfungsi karena pada dasarnya Anda memperlakukan 28eb00 sebagai cabang.
Untuk versi git yang saya gunakan, metode ini memerlukan hash komit penuh - tidak ada singkatan atau alias yang diizinkan. Anda bisa melakukan sesuatu seperti:
sumber