Menyelesaikan konflik gabungan 'keduanya ditambahkan' di git?

144

Saya melakukan rebasing di git, dan satu konflik yang saya dapatkan adalah 'keduanya ditambahkan' - yaitu, nama file yang persis sama telah ditambahkan secara independen di cabang saya, dan di cabang tempat saya melakukan rebasing. git statusBeritahu aku:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#       both added:         src/MyFile.cs

Pertanyaan saya adalah, bagaimana cara mengatasi ini? Apakah saya harus menggunakan alat gabungan atau adakah cara untuk melakukannya hanya dari baris perintah? Jika saya git rm src/MyFile.cs, bagaimana git mengetahui versi file mana yang ingin saya hapus dan mana yang ingin saya simpan?

Jez
sumber

Jawaban:

143

Jika Anda menggunakan git rmgit, semua versi dari jalur tersebut akan dihapus dari indeks sehingga tindakan penyelesaian Anda akan membuat Anda tidak memiliki versi mana pun.

Anda dapat menggunakan git checkout --ours src/MyFile.csuntuk memilih versi dari cabang yang akan Anda rebasing atau git checkout --theirs src/MyFile.csuntuk memilih versi dari cabang yang Anda rebasing.

Jika Anda menginginkan campuran, Anda perlu menggunakan alat penggabung atau mengeditnya secara manual.

CB Bailey
sumber
1
Terima kasih. Dan saya baru menyadari bahwa alasan alat penggabung tidak berfungsi adalah karena git membuat file .LOCAL dan .REMOTE untuk penggabungan, tetapi bukan file .BASE. Saya pikir itu seharusnya hanya membuat file .BASE kosong. Jika Anda membuat file .BASE kosong secara manual, alat penggabung berfungsi dengan baik.
Jez
1
@Jez: Silakan lihat utas ini: thread.gmane.org/gmane.comp.version-control.git/188776/…
CB Bailey
1
Jadi maksud Anda ini akan diperbaiki di versi terbaru git?
Jez
1
@Jez: Ada dalam versi git> = 1.7.9.1 git.kernel.org/?p=git/…
CB Bailey
23
Dari jawaban @Tom: Saat melakukan ... git checkout --ours someFile Sepertinya tidak melakukan apa pun saat melakukan status git. Ingatlah untuk melakukan ini setelahnya. git add someFile git status
Pec
72

Saya terkadang merasa bingung menggunakan opsi --theirsdan --oursuntuk mengidentifikasi dari mana file itu akan berasal. Sebagian besar waktu saya akan berada di cabang yang saya rebasing yang dirujuk oleh --theirs!

Anda juga bisa menggunakan git checkout <tree-ish> -- src/MyFile.cs

Dimana <tree-ish>dapat diganti dengan nama cabang atau commit-id yang berisi file yang ingin Anda simpan.

git checkout 6a363d8 -- src/MyFile.cs

git checkout my_branch -- src/MyFile.cs

git checkout HEAD -- src/MyFile.cs

Anas Alkhatib
sumber
43

Saat melakukan ...

git checkout --ours someFile

Ini mungkin tampak seperti tidak melakukan apapun saat melakukan status git.

Ingatlah untuk melakukan ini setelahnya.

git add someFile
git status
Tom
sumber