Saya di tengah rebasing setelah a git pull --rebase
. Saya punya beberapa file yang menggabungkan konflik. Bagaimana saya bisa menerima perubahan "mereka" atau "saya" untuk file tertentu?
$ git status
# Not currently on any branch.
# You are currently rebasing.
# (fix conflicts and then run "git rebase --continue")
# (use "git rebase --skip" to skip this patch)
# (use "git rebase --abort" to check out the original branch)
#
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: CorrectlyMergedFile
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add <file>..." to mark resolution)
#
# both modified: FileWhereIWantToAcceptTheirChanges
# both modified: FileWhereIWantToAcceptMyChanges
Biasanya saya hanya membuka file atau alat gabungan dan secara manual menerima semua perubahan "mereka" atau "saya". Namun, saya curiga saya kehilangan perintah git yang mudah.
Juga, perhatikan bahwa saya hanya akan dapat memilih strategi penggabungan untuk setiap file ketika saya melihat file apa yang mengenai konflik dan kemungkinan konflik tersebut.
git
git-rebase
git-merge-conflict
Steven Wexler
sumber
sumber
Jawaban:
Untuk setiap file yang konflik yang Anda dapatkan, Anda dapat menentukan
Dari
git checkout
dokumensumber
git rebase -s recursive -X <ours/theirs>
ataugit merge -s recursive -X <ours/theirs>
. Perlu diingat bahwa untuk rebase, "milik kita" dan "milik mereka" dibalik dari apa yang mereka lakukan saat penggabungan. Anda mungkin bisa menggunakan file / shell glob juga, sepertigit checkout --theirs -- *.txt
.ours/theirs
dengan rebase membuatku gila !! (Masuk akal sekarang bahwa saya berpikir tentang bagaimana rebase sebenarnya bekerja, tetapi sama sekali tidak intuitif.)git checkout --outs -- "**/*.csproj"
akan melakukan apa yang Anda maksudkan. Hal yang sama berlaku misalnya untukgit lfs track "*.jpg"
. Jika Anda memiliki beberapa file jpg di CWD Anda, tanpa tanda kutip, hanya ini yang akan dilacak.Meskipun pertanyaan ini dijawab, berikan contoh tentang apa arti "milik mereka" dan "milik kita" dalam kasus git rebase vs merge. Lihat tautan ini
Git Rebase
theirs
sebenarnya adalah cabang saat ini dalam kasus rebase . Jadi set perintah di bawah ini sebenarnya menerima perubahan cabang Anda saat ini atas cabang jarak jauh.Git Merge
Untuk menggabungkan , arti
theirs
danours
dibalik. Jadi, untuk mendapatkan efek yang sama selama penggabungan , yaitu, pertahankan perubahan cabang Anda saat ini (ours
) di atas cabang jarak jauh yang digabungkan (theirs
).sumber
Catatan yang
git checkout --ours|--theirs
akan menimpa file sepenuhnya , dengan memilih salah satutheirs
atauours
versi, yang mungkin atau mungkin tidak apa yang ingin Anda lakukan (jika Anda memiliki perubahan yang tidak bertentangan datang dari sisi lain, mereka akan hilang).Jika Anda ingin melakukan penggabungan tiga arah pada file tersebut, dan hanya menyelesaikan bakhil yang berkonflik dengan menggunakan
--ours|--theirs
, sambil tetap mempertahankan bakhil yang tidak berkonflik dari kedua sisi, Anda mungkin ingin menggunakangit merge-file
; lihat detail dalam jawaban ini .sumber
example.txt
dalamours
versi, yang satu bertentangan (juga diubah dalamtheirs
revisi), yang lain tidak-berkonflik. Jika Anda melakukannyagit checkout --theirs example.txt
, itu hanya akan membabi buta membaca seluruh file padatheirs
revisi, dan bagian yang tidak konflik dari diff akan hilang.git checkout --merge <path>
.