git pull konflik ketika menarik cabang tidak lancar

0

Saya punya masalah ketika memanipulasi git pull. Pertimbangkan saya memiliki 2 cabang di repositori jarak jauh (asal) saya: A dan B.

Cabang B jarak jauh berada di depan cabang B lokal dengan 1 komit.

Komit tambahan ini (pada cabang B jarak jauh) hanya menambahkan file baru, katakan "newfile".

Di cabang lokal saya A, saya punya file "file baru" dan isinya berbeda dari salah satu cabang B terpencil.

Lalu, saya menjalankan perintah ini:

git checkout A
git pull origin B:B

Saya bisa melihat perilaku berikut: cabang B diperbarui seperti yang saya harapkan. B telah diteruskan dengan cepat, dan kemudian berisi "file baru". Tetapi saya juga memiliki konflik pada "file baru". dan dalam direktori saya saat ini, file "newfile" berisi penanda konflik.

Mengapa ada konflik sementara penggabungan sudah dilakukan?

Terima kasih.

nugget
sumber

Jawaban:

0

Ketika Anda melakukan tarikan, (secara default) ia mendapatkan semua yang ia bisa tanpa menimpa perubahan yang telah Anda buat. Apa pun yang tidak dapat diperoleh karena harus mengubah hasil edit Anda dianggap sebagai konflik. Konflik perlu diselesaikan secara manual, atau Anda dapat membatalkan perubahan dan melakukan penarikan lainnya. Setelah Anda menyelesaikan penggabungan, Anda bisa melakukan push untuk melakukan perubahan.

Ini adalah perilaku default karena pikirkan betapa buruknya ini jika tidak melakukan ini - perubahan Anda dapat terhempas dengan tarikan tanpa izin Anda.

TTT
sumber
ketika saya menjalankan "git pull asal B: B" Saya berharap bahwa cabang jarak jauh B bergabung ke cabang lokal saya B. Dalam hal ini, penggabungan maju-cepat dimungkinkan, dan itu berhasil dilakukan! Tetapi mengapa masih ada konflik? Konflik tersebut adalah antara versi B "remotefile" yang jauh dan versi "newfile" lokal A (cabang saya saat ini). Tapi saya tidak berharap bahwa cabang saat ini (A) akan ikut campur dalam operasi tarik. mengapa demikian?
nugget
0

Saya pikir saya salah mengerti semantik git pull. Saya pikir itu:

git pull origin B:B

dimaksudkan:

fetch the remote B 
         + 
merge the remote B into the local B

Saya menyadari bahwa itu berarti:

fetch the remote B and updates (if fast-forward is possible)  the local B
             +
merge the remote B into the local branch

Bahkan tarikan git akan selalu membuat penggabungannya ke cabang lokal, terlepas dari refspec.

Dengan kata lain, tarik = ambil + gabungkan. Pembaruan cabang B lokal dilakukan dengan "fetch", dan konflik dihasilkan oleh operasi gabungan berikut (ke cabang lokal).

nugget
sumber