Pertanyaan Saya mengalami konflik gabungan. Bagaimana saya bisa membatalkan penggabungan?


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 bagus dan milik saya buruk sehingga semua perubahan saya harus ditinggalkan. Bagaimana saya bisa melakukan ini?


1911
2017-09-19 13:21


asal


Jawaban:


Sejak Anda pull tidak berhasil saat itu HEAD (tidak HEAD^) adalah commit "valid" terakhir di cabang Anda:

git reset --hard HEAD

Bagian lain yang Anda inginkan adalah membiarkan perubahan mereka over-naik perubahan Anda.

Versi git yang lebih lama memungkinkan Anda untuk menggunakan strategi gabungan "mereka":

git pull --strategy=theirs remote_branch

Tapi ini telah dihapus, seperti yang dijelaskan dalam pesan ini oleh Junio ​​Hamano (pengelola Git). Sebagaimana dicatat dalam tautan, sebaliknya Anda akan melakukan ini:

git fetch origin
git reset --hard origin

1727
2017-09-19 14:33



Jika versi git Anda>> 1.6.1, Anda dapat menggunakannya git reset --merge.

Juga, seperti disebutkan @Michael Johnson, jika versi git Anda> = 1.7.4, Anda juga dapat menggunakannya git merge --abort.

Seperti biasa, pastikan Anda tidak memiliki perubahan yang tidak terikat sebelum Anda memulai penggabungan.

Dari git menggabungkan halaman manual

git merge --abort setara dengan git reset --merge kapan MERGE_HEAD hadir.

MERGE_HEAD hadir ketika penggabungan sedang berlangsung.

Juga, mengenai perubahan yang tidak terikat saat memulai penggabungan:

Jika Anda memiliki perubahan yang tidak ingin Anda lakukan sebelum memulai penggabungan, adil git stash sebelum bergabung dan git stash pop setelah selesai menggabungkan atau menggugurkannya.


1584
2018-03-28 23:16



git merge --abort

Batalkan proses resolusi konflik saat ini, dan cobalah merekonstruksi   keadaan pra-gabung.

Jika ada perubahan worktree yang tidak terikat hadir saat penggabungan   dimulai, git merge --abort dalam beberapa kasus tidak akan bisa   merekonstruksi perubahan ini. Oleh karena itu dianjurkan untuk selalu   commit atau simpanan perubahan Anda sebelum menjalankan git merge.

git merge --abort setara dengan git reset --merge kapan    MERGE_HEAD hadir.

http://www.git-scm.com/docs/git-merge


378
2017-11-12 21:40



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 diganggu dalam konflik git, sediakan file versi basis umum, lokal, dan jarak jauh dalam indeks. (Ini adalah tempat mereka dibaca untuk digunakan dalam alat diff 3-arah oleh git mergetool.) Kamu dapat memakai git show untuk melihatnya.

# common base:
git show :1:_widget.html.erb

# 'ours'
git show :2:_widget.html.erb

# 'theirs'
git show :3:_widget.html.erb

Cara termudah untuk menyelesaikan konflik untuk menggunakan verbatim versi remote adalah:

git show :3:_widget.html.erb >_widget.html.erb
git add _widget.html.erb

Atau, dengan git> = 1.6.1:

git checkout --theirs _widget.html.erb

73
2017-09-20 10:41



menurutku itu git reset yang Anda butuhkan.

Hati-hati itu git revert berarti sesuatu yang sangat berbeda dengan, katakanlah, svn revert - di Subversion, pengembalian akan membuang perubahan (tidak terikat) Anda, mengembalikan file ke versi saat ini dari repositori, sedangkan git revert "Membatalkan" komit.

git reset harus melakukan yang setara svn revert, artinya, buang perubahan yang tidak diinginkan.


72
2017-09-19 13:25



Karena komentar menunjukkan itu git reset --merge adalah alias untuk git merge --abort, perlu diperhatikan itu git merge --abort hanya setara dengan git reset --mergemengingat bahwa a MERGE_HEAD hadir. Ini bisa dibaca di bantuan git untuk menggabungkan perintah.

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

Setelah penggabungan gagal, ketika tidak ada MERGE_HEAD, penggabungan gagal dapat dibatalkan dengan git reset --merge tetapi tidak harus dengan git merge --abort, jadi mereka tidak hanya sintaks lama dan baru untuk hal yang sama.

Secara pribadi saya temukan git reset --merge jauh lebih kuat untuk skenario yang mirip dengan yang dijelaskan, dan gagal menyatu secara umum.


29
2018-04-02 12:16



Sejak Git 1.6.1.3 git checkout telah dapat keluar dari salah satu sisi gabungan:

git checkout --theirs _widget.html.erb

16
2017-07-17 01:29



Sebuah alternatif, yang mempertahankan kondisi copy pekerjaan adalah:

git stash
git merge --abort
git stash pop

Saya biasanya menyarankan untuk menentang hal ini, karena ini efektif seperti menggabungkan dalam Subversion karena membuang hubungan cabang dalam komit berikut.


13
2017-07-13 18:57



Dan jika Anda berakhir dengan menggabungkan konflik dan tidak memiliki hal-hal untuk melakukan tetapi masih menggabungkan kesalahan sedang ditampilkan setelah menerapkan semua perintah yang disebutkan di bawah ini,

git reset --hard HEAD
git pull --strategy=theirs remote_branch
git fetch origin
git reset --hard origin

tolong di hapus

.git \ index.lock

file [potong tempel ke beberapa lokasi lain dalam hal pemulihan] lalu masukkan salah satu dari perintah di bawah ini tergantung pada versi yang Anda inginkan.

git reset --hard HEAD
git reset --hard origin

Semoga bermanfaat !!!


8
2018-04-10 21:26