Saya menggunakan git pull
dan memiliki konflik gabungan:
unmerged: _widget.html.erb
You are in the middle of a conflicted merge.
Saya tahu bahwa versi lain dari file tersebut baik dan milik saya buruk sehingga semua perubahan saya harus ditinggalkan. Bagaimana saya bisa melakukan ini?
git
version-control
git-merge
git-merge-conflict
Gwyn Morfey
sumber
sumber
[rejected] gh-pages -> gh-pages (non-fast-forward)
Jawaban:
Karena Anda
pull
tidak berhasil makaHEAD
(tidakHEAD^
) adalah komit "valid" terakhir di cabang Anda:Bagian lain yang Anda inginkan adalah membiarkan perubahan mereka menunggangi perubahan Anda.
Versi git yang lebih lama memungkinkan Anda untuk menggunakan strategi gabungan "mereka":
Tapi ini sejak itu telah dihapus, seperti yang dijelaskan dalam pesan ini oleh Junio Hamano (pengelola Git). Seperti tercantum dalam tautan , Anda justru akan melakukan ini:
sumber
git fetch origin
->git reset origin (soft reset, your changes are still present)
->git checkout file_to_use_their_version_of another_file (steamroll your own changes back to match the origin)
Saya tidak pernah menggunakan git pull lagi. Karena dalam pertarungan antara kode terbaru saya dan asal, asal harus selalu menang, saya selalugit fetch
dangit rebase origin
. Ini sebenarnya membuat merger dan konflik saya sedikit dan jarang.git log ..@{upstream}
ataugit diff ..@{upstream}
). Setelah itu, seperti Anda, saya akan memulai kembali pekerjaan saya.git merge -X theirs remote_branch
bukannyagit pull --strategy=theirs remote_branch
sebagaitheirs
terlihat seperti sebuah pilihanrecursive
git merge --abort
jauh lebih disukai.Jika versi git Anda>> 1.6.1, Anda dapat menggunakan
git reset --merge
.Juga, seperti yang disebutkan @Michael Johnson, jika versi git Anda>> 1.7.4, Anda juga dapat menggunakan
git merge --abort
.Seperti biasa, pastikan Anda tidak memiliki perubahan yang tidak dikomit sebelum Anda memulai penggabungan.
Dari halaman manual git merge
git merge --abort
setara dengangit reset --merge
kapanMERGE_HEAD
hadir.MERGE_HEAD
hadir saat penggabungan sedang berlangsung.Juga, tentang perubahan yang tidak dikomit ketika memulai penggabungan:
Jika Anda memiliki perubahan yang tidak ingin Anda komit sebelum memulai penggabungan, cukup
git stash
mereka sebelum penggabungan dangit stash pop
setelah menyelesaikan penggabungan atau batalkan.sumber
<commit>
? #GitMoment: -ogit merge --abort
hanya sinonim untukgit reset --merge
? Nama itu tentu saja lebih masuk akal, tetapi apakah ia memiliki fungsi yang sama?http://www.git-scm.com/docs/git-merge
sumber
Ini sangat mudah.
Git sendiri menunjukkan kepada Anda solusinya ketika Anda berada dalam masalah seperti ini dan menjalankan perintah status git.
Semoga ini bisa membantu orang.
sumber
Saya pikir itu yang
git reset
Anda butuhkan.Waspadalah itu
git revert
berarti sesuatu yang sangat berbeda dengan, katakanlah,svn revert
- di Subversion, revert akan membuang perubahan Anda (yang tidak dikomit), mengembalikan file ke versi saat ini dari repositori, sedangkangit revert
"undo" komit.git reset
harus melakukan hal yang setara dengansvn revert
, yaitu, buang perubahan yang tidak diinginkan.sumber
Dalam kasus penggunaan khusus ini, Anda tidak benar-benar ingin membatalkan penggabungan, cukup selesaikan konflik dengan cara tertentu.
Tidak ada kebutuhan khusus untuk mengatur ulang dan melakukan penggabungan dengan strategi yang berbeda. Konflik telah disorot dengan benar oleh git dan persyaratan untuk menerima perubahan pihak lain hanya untuk file yang satu ini.
Untuk file yang tidak di-unmerged di dalam git konflik, tersedia versi dasar, lokal dan jarak jauh dari file dalam indeks. (Di sinilah mereka dibaca dari untuk digunakan dalam alat diff 3-cara oleh
git mergetool
.) Anda dapat menggunakangit show
untuk melihatnya.Cara paling sederhana untuk menyelesaikan konflik untuk menggunakan versi jauh kata demi kata adalah:
Atau, dengan git> = 1.6.1:
sumber
git 1.6.1
perintah itu masuk akal, dan bagus. Itulah tepatnya yang saya inginkan. Saya pikir solusi pra-1.6.1 tidak sempurna dan membutuhkan pengetahuan tentang bagian-bagian lain dari git yang harus dipisahkan dari proses resolusi gabungan. Tapi versi baru itu hebat!Untuk skenario seperti, saya lakukan
git fetch
dangit pull
, kemudian menyadari bahwa cabang hulu bukan cabang utama, yang mengakibatkan konflik yang tidak diinginkan.Ini dikembalikan kembali tanpa mengatur ulang perubahan lokal saya.
sumber
Komentar menyarankan itu
git reset --merge
adalah alias untukgit merge --abort
. Perlu diperhatikan bahwagit merge --abort
hanya setara dengan yanggit reset --merge
diberikanMERGE_HEAD
. Ini bisa dibaca di git help untuk menggabungkan perintah.Setelah penggabungan yang gagal, saat tidak ada
MERGE_HEAD
, gabungan yang gagal dapat diurungkangit reset --merge
, tetapi tidak harus dengangit merge --abort
. Mereka tidak hanya sintaks lama dan baru untuk hal yang sama .Secara pribadi, saya menemukan
git reset --merge
jauh lebih kuat untuk skenario yang mirip dengan yang dijelaskan, dan gagal menggabungkan secara umum.sumber
git stash apply
menyebabkan konflik gabungan bagi saya tetapigit merge --abort
tidak membantu saatgit reset --merge
melakukannya.Jika Anda berakhir dengan konflik gabungan dan tidak memiliki apa pun untuk dikomit, tetapi kesalahan gabungan masih ditampilkan. Setelah menerapkan semua perintah yang disebutkan di bawah ini,
Tolong di hapus
File [cut paste ke beberapa lokasi lain dalam kasus pemulihan] dan kemudian masukkan perintah di bawah ini tergantung pada versi yang Anda inginkan.
Semoga itu bisa membantu !!!
sumber
Alternatif, yang mempertahankan status copy pekerjaan adalah:
Saya biasanya menyarankan ini, karena ini efektif seperti bergabung dalam Subversion karena membuang hubungan cabang di komit berikut.
sumber
Karena Git 1.6.1.3
git checkout
telah dapat keluar dari kedua sisi penggabungan:sumber
Saya menemukan yang berikut ini berfungsi untuk saya (kembalikan satu file ke status pra-penggabungan):
sumber
Sourcetree
Karena Anda tidak melakukan penggabungan, maka cukup klik dua kali pada cabang lain (yang berarti checkout) dan ketika sourcetree bertanya kepada Anda tentang membuang semua perubahan maka setujui :)
sumber