Saya memiliki dua cabang (A dan B) dan saya ingin menggabungkan satu file dari cabang A dengan file tunggal yang sesuai dari Cabang B.
git
merge
git-branch
Isuru
sumber
sumber
git diff branch_name > patch
git apply patch
. stackoverflow.com/a/9473543/1091853Jawaban:
Saya menemukan masalah yang sama. Lebih tepatnya, saya memiliki dua cabang
A
danB
dengan file yang sama tetapi antarmuka pemrograman yang berbeda dalam beberapa file. Sekarang metode filef
, yang independen dari perbedaan antarmuka di dua cabang, diubah dalam cabangB
, tetapi perubahan ini penting untuk kedua cabang. Jadi, saya perlu menggabungkan hanya filef
cabangB
ke filef
cabangA
.Perintah sederhana sudah memecahkan masalah bagi saya jika saya berasumsi bahwa semua perubahan dilakukan di kedua cabang
A
danB
:Perintah pertama beralih ke cabang
A
, ke tempat saya ingin menggabungkanB
versi filef
. Perintah kedua patch filef
denganf
dariHEAD
dariB
. Anda bahkan dapat menerima / membuang satu bagian patch. Alih-alihB
Anda dapat menentukan komit apa pun di sini, itu tidak harusHEAD
.Suntingan komunitas : Jika file
f
aktifB
belum adaA
, maka abaikan--patch
opsi. Jika tidak, Anda akan mendapatkan "Tidak Ada Perubahan." pesan.sumber
git checkout --patch B -- f
untuk mendapatkan ini berfungsi.a
selama fase interaktif, alih-alih menekany
setiap waktu. Atau gunakangit checkout B -- f
perintah sebagai gantinya.Inilah yang saya lakukan dalam situasi ini. Itu adalah kludge tetapi itu bekerja dengan baik untuk saya.
Saya mencoba menambal dan situasi saya terlalu buruk untuk itu. Jadi singkatnya akan terlihat seperti ini:
Cabang Kerja: Cabang Eksperimental: B (berisi file.txt yang memiliki perubahan yang ingin saya lipat.)
Buat cabang baru berdasarkan A:
Gabungkan B ke dalam tempAB
Salin hash sha1 dari penggabungan:
Periksa cabang kerja Anda:
Periksa file perbaikan Anda:
Dan di sana Anda harus memilikinya. Komit hasil Anda.
sumber
A
telah beralih dariB
awal, dengan cara lain. Menyalin akan mengatasi perbedaan-perbedaan itu.Ini menggunakan difftool internal git. Mungkin sedikit pekerjaan yang harus dilakukan tetapi terus terang.
sumber
--
(label argumen kosong), git checkout docs: ARGUMENT DISAMBIGUATION mengatakan: "gunakangit checkout -- <pathspec>
jika Anda ingin checkout jalur ini dari indeks." Ini karena Anda bisa memiliki cabang dan file / jalur dengan nama yang sama. Dalam kasus seperti itu, daripada meminta Anda untuk tidak menentukan apakah cabang atau path harus diperiksa ketika keduanya ada, git akan memilih untuk checkout cabang secara default. Namun jika--
precit git akan checkout file / path sebagai gantinya.Saya menemukan pendekatan ini sederhana dan bermanfaat: Cara "menggabungkan" file tertentu dari cabang lain
Silakan baca seluruh artikel untuk pemahaman lebih lanjut
sumber
-p
opsi dalam perintah itu. Yang kemudian, menimpa setiap bagian pada file worktree Anda yang sebelumnya dialihkan dari cabang tempat Anda keluar, sebelum perubahan patch, sayangnya.Anda bisa menggunakan:
Kiat: https://www.kernel.org/pub/software/scm/git/docs/git-merge-file.html
sumber
git merge-file
Perintah berikut akan (1) membandingkan file dari cabang yang benar, untuk menguasai (2) secara interaktif bertanya kepada Anda modifikasi mana yang berlaku.
git checkout - master pengirim
sumber
Hasil edit saya ditolak, jadi saya melampirkan cara menangani perubahan gabungan dari cabang jarak jauh di sini.
Jika Anda harus melakukan ini setelah penggabungan yang salah, Anda dapat melakukan sesuatu seperti ini:
sumber
Dengan asumsi B adalah cabang saat ini:
Perhatikan bahwa ini hanya berlaku untuk perubahan file lokal. Anda harus berkomitmen setelahnya.
sumber
error: <file-path>: already exists in working directory
git diff Branch_A <file-path, filename> -- hash_commit > file_name.temp
Anda bisa checkout versi lama file untuk digabung, menyimpannya di bawah nama yang berbeda, kemudian jalankan alat penggabungan apa pun Anda pada dua file.
misalnya.
git show B:src/common/store.ts > /tmp/store.ts
(di mana B adalah nama cabang / komit / tag)meld src/common/store.ts /tmp/store.ts
sumber
Saya akan melakukannya sebagai
git format-patch branch_old..branch_new file
ini akan menghasilkan tambalan untuk file.
Terapkan tambalan di target branch_old
git am blahblah.patch
sumber