Untuk menggabungkan file secara selektif dari satu cabang ke cabang lain, jalankan
git merge --no-ff --no-commit branchX
di mana branchXcabang yang ingin Anda gabungkan menjadi cabang saat ini.
The --no-commitpilihan akan menggelar file yang telah digabungkan oleh Git tanpa benar-benar melakukan mereka. Ini akan memberi Anda kesempatan untuk memodifikasi file yang digabungkan namun Anda ingin dan kemudian melakukannya sendiri.
Bergantung pada bagaimana Anda ingin menggabungkan file, ada empat kasus:
1) Anda ingin penggabungan yang benar.
Dalam hal ini, Anda menerima file yang digabungkan dengan cara Git menggabungkannya secara otomatis dan kemudian mengkomitnya.
2) Ada beberapa file yang tidak ingin Anda gabungkan.
Misalnya, Anda ingin mempertahankan versi di cabang saat ini dan mengabaikan versi di cabang yang Anda gabungkan.
Untuk memilih versi di cabang saat ini, jalankan:
git checkout HEAD file1
Ini akan mengambil versi file1di cabang saat ini dan menimpa yang file1diautomatisasi oleh Git.
3) Jika Anda menginginkan versi di branchX (dan bukan gabungan sebenarnya).
Lari:
git checkout branchX file1
Ini akan mengambil versi file1in branchXdan overwrite yang file1digabungkan secara otomatis oleh Git.
4) Kasus terakhir adalah jika Anda hanya ingin memilih gabungan tertentu file1.
Dalam hal ini, Anda dapat mengedit yang dimodifikasi file1secara langsung, memperbarui ke versi apa pun yang Anda inginkan file1, dan kemudian komit.
Jika Git tidak dapat menggabungkan file secara otomatis, itu akan melaporkan file sebagai " unmerged " dan menghasilkan salinan di mana Anda harus menyelesaikan konflik secara manual.
Untuk menjelaskan lebih lanjut dengan contoh, katakanlah Anda ingin bergabung branchXke cabang saat ini:
git merge --no-ff --no-commit branchX
Anda kemudian menjalankan git statusperintah untuk melihat status file yang dimodifikasi.
Sebagai contoh:
git status
# On branch master
# Changes to be committed:
#
# modified: file1
# modified: file2
# modified: file3
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: file4
#
Di mana file1,, file2dan file3file-file git telah berhasil digabungkan secara otomatis.
Ini artinya bahwa perubahan pada masterdan branchXuntuk ketiga file tersebut telah digabungkan bersama tanpa konflik.
Anda dapat memeriksa bagaimana penggabungan dilakukan dengan menjalankan git diff --cached;
git diff --cached file1
git diff --cached file2
git diff --cached file3
Jika Anda menemukan beberapa penggabungan yang tidak diinginkan maka Anda bisa
- edit file secara langsung
- menyimpan
git commit
Jika Anda tidak ingin menggabungkan file1dan ingin mempertahankan versi di cabang saat ini
Lari
git checkout HEAD file1
Jika Anda tidak ingin bergabung file2dan hanya ingin versi masukbranchX
Lari
git checkout branchX file2
Jika Anda ingin file3digabungkan secara otomatis, jangan lakukan apa pun.
Git sudah menggabungkannya pada saat ini.
file4di atas adalah penggabungan gagal oleh Git. Ini berarti ada perubahan di kedua cabang yang terjadi pada baris yang sama. Di sinilah Anda harus menyelesaikan konflik secara manual. Anda bisa membuang gabungan yang dilakukan dengan mengedit file secara langsung atau menjalankan perintah checkout untuk versi di cabang yang Anda inginkan file4.
Akhirnya, jangan lupa git commit.