Ketika saya mencoba menarik direktori proyek saya di terminal, saya melihat kesalahan berikut:
harsukh@harsukh-desktop:~/Sites/branch1$ git pull origin master
U app/config/app.php
U app/config/database.php
U app/routes.php
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
Mengapa git mengatakan "Pull is not possible because you have unmerged files"
, dan bagaimana saya bisa menyelesaikannya?
git
git-pull
merge-conflict-resolution
git-fetch
Harsukh Makwana
sumber
sumber
Jawaban:
Apa yang terjadi saat ini adalah, bahwa Anda memiliki set file tertentu, yang telah Anda coba gabungkan sebelumnya, tetapi mereka memunculkan konflik gabungan. Idealnya, jika seseorang mendapat konflik gabungan, ia harus menyelesaikannya secara manual, dan melakukan perubahan menggunakan
git add file.name && git commit -m "removed merge conflicts"
. Sekarang, pengguna lain telah memperbarui file yang dipermasalahkan di repositori-nya, dan telah mendorong perubahannya ke repo hulu umum.Kebetulan, konflik gabungan Anda dari (mungkin) komit terakhir tidak terselesaikan, jadi file Anda tidak digabung, dan karenanya flag
U
(unmerged
) untuk file. Jadi sekarang, ketika Anda melakukangit pull
, git memunculkan kesalahan, karena Anda memiliki beberapa versi file, yang tidak diselesaikan dengan benar.Untuk menyelesaikan ini, Anda harus menyelesaikan konflik gabungan yang dipertanyakan, dan menambahkan dan melakukan perubahan, sebelum Anda dapat melakukan a
git pull
.Reproduksi sampel dan resolusi masalah:
Pertama, mari kita buat struktur repositori
Sekarang kita berada di repo_clone, dan jika Anda melakukan
git pull
, itu akan memunculkan konflikJika kita mengabaikan konflik di klon, dan membuat lebih banyak komitmen dalam repo asli sekarang,
Dan kemudian kita lakukan
git pull
, kita dapatkanPerhatikan bahwa
file
saat ini berada dalam keadaan tidak terendam dan jika kita melakukangit status
, kita dapat dengan jelas melihat hal yang sama:Jadi, untuk menyelesaikan ini, pertama-tama kita harus menyelesaikan konflik gabungan yang kita abaikan sebelumnya
dan atur isinya ke
lalu tambahkan dan komit perubahan
sumber
Anda mencoba menambahkan satu lagi komitmen baru ke cabang lokal Anda sementara direktori kerja Anda tidak bersih. Alhasil, Git menolak melakukan tarikan. Pertimbangkan diagram berikut untuk memvisualisasikan skenario dengan lebih baik:
Ada dua opsi untuk menghadapi situasi ini. Anda dapat membuang perubahan di file Anda, atau menyimpannya.
Opsi satu: Buang perubahan yang
bisa Anda gunakan
git checkout
untuk setiap file yang tidak dihapus, atau Anda dapat menggunakangit reset --hard HEAD
untuk mengatur ulang semua file di cabang Anda ke HEAD. Omong-omong, KEPALA di cabang lokal Anda adalah B, tanpa tanda bintang. Jika Anda memilih opsi ini, diagram menjadi:Sekarang ketika Anda menarik, Anda dapat memajukan cabang Anda secara cepat dengan perubahan dari master. Setelah menarik, cabang Anda akan terlihat seperti master:
Opsi dua: Pertahankan perubahan
Jika Anda ingin menyimpan perubahan, pertama-tama Anda ingin menyelesaikan konflik penggabungan di setiap file. Anda dapat membuka setiap file di IDE Anda dan mencari simbol-simbol berikut:
Git memberi Anda dua versi kode. Kode yang terkandung dalam marka HEAD adalah versi dari cabang lokal Anda saat ini. Versi lainnya adalah apa yang datang dari remote. Setelah memilih versi kode (dan menghapus kode lainnya bersama dengan spidol), Anda dapat menambahkan setiap file ke area pementasan dengan mengetik
git add
. Langkah terakhir adalah mengkomit hasil Anda dengan mengetikgit commit -m
dengan pesan yang sesuai. Pada titik ini, diagram kami terlihat seperti ini:Di sini saya memberi label komit yang baru kami buat sebagai C 'karena berbeda dari komit C pada remote. Sekarang, jika Anda mencoba menarik, Anda akan mendapatkan kesalahan maju yang tidak cepat. Git tidak dapat memainkan perubahan di remote di cabang Anda, karena baik cabang Anda dan remote telah menyimpang dari leluhur yang sama melakukan B. Pada titik ini, jika Anda ingin menarik Anda bisa melakukan yang lain
git merge
, ataugit rebase
cabang Anda di remote.Mendapatkan penguasaan Git membutuhkan kemampuan untuk memahami dan memanipulasi daftar tertaut satu arah. Saya harap penjelasan ini akan membuat Anda berpikir ke arah yang benar tentang penggunaan Git.
sumber
Ada solusi sederhana untuk itu. Tetapi untuk itu Anda harus terlebih dahulu mempelajari yang berikut ini
Untuk menghapus konflik, Anda dapat menggunakan
Perintah di atas pada dasarnya membuka file lokal, file campuran, file jarak jauh (total 3 file), untuk setiap file yang konflik. File lokal & jarak jauh hanya untuk referensi Anda, dan dengan menggunakannya Anda dapat memilih apa yang akan disertakan (atau tidak) dalam file campuran. Dan cukup simpan dan keluar file.
sumber
Jika Anda tidak ingin menggabungkan perubahan dan masih ingin memperbarui lokal Anda maka jalankan:
Ini akan mengatur ulang lokal Anda dengan HEAD dan kemudian menarik remote Anda menggunakan git pull.
Jika Anda sudah melakukan penggabungan secara lokal (tetapi belum mendorong ke jarak jauh), dan ingin mengembalikannya juga:
sumber
Jika Anda ingin menarik cabang jauh untuk dijalankan secara lokal (katakanlah untuk meninjau atau menguji tujuan), dan ketika
$ git pull
Anda mendapatkan konflik gabungan lokal:sumber
Anda memiliki beberapa file secara lokal yang perlu digabungkan sebelum Anda dapat menarik. Anda dapat checkout file dan kemudian tarik untuk menimpa file lokal Anda.
sumber
Langkah-langkah untuk diikuti:
Terima kasih, Sarbasish
sumber
Ada masalah yang sama dengan saya.
Dalam kasus saya, langkah-langkahnya seperti di bawah ini -
Berikut adalah pesan yang muncul-
dan masing-masing memiliki 2 dan 1 komit yang berbeda. Anda memiliki jalur yang tidak dihapus.
(use "git pull" to merge the remote branch into yours)
(fix conflicts and run "git commit")
Jalur yang tidak dihapus:
(gunakan "git add ..." untuk menandai resolusi)
Putaran mana yang mungkin masalah teratasi dengan gambar ini -
sumber
Ketika konflik gabungan terjadi, Anda bisa membuka file individual. Anda akan mendapatkan simbol "<<<<<<< atau >>>>>>>". Ini merujuk pada perubahan Anda dan perubahan yang ada pada remote. Anda dapat secara manual mengedit bagian yang diperlukan. setelah itu simpan file tersebut lalu lakukan: git add
Konflik gabungan akan diselesaikan.
sumber
Jalankan saja perintah ini:
sumber