Saya menghadapi konflik gabungan. Bagaimana saya bisa menginterupsi penggabungan?

Saya menggunakan git pull dan mengalami konflik gabungan:

 unmerged: _widget.html.erb You are in the middle of a conflicted merge. 

Saya tahu bahwa versi file yang lain baik dan catur saya, jadi semua perubahan saya harus dibalik. Bagaimana saya bisa melakukan ini?

1947
19 сент. diatur oleh Gwyn Morfey 19 Sep 2008-09-19 16:21 '08 pada 16:21 2008-09-19 16:21
@ 10 jawaban

Karena pull Anda tidak berhasil, maka HEAD (bukan HEAD^ ) adalah komit "valid" terakhir di utas Anda:

 git reset --hard HEAD 

Bagian lain yang Anda inginkan adalah membiarkan perubahan Anda melebihi perubahan Anda.

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

 git pull --strategy=theirs remote_branch 

Tetapi sejak itu telah dihapus, seperti yang dijelaskan dalam posting ini oleh Junio ​​Hamano (yang menyertai git). Seperti yang ditunjukkan dalam tautan , Anda akan melakukan hal berikut:

 git fetch origin git reset --hard origin 
1752
19 сент. Balas diberikan oleh Pat Notz pada 19 Sep 2008-09-19 17:33 '08 pada 17:33 2008-09-19 17:33

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

Selain itu, seperti @Michael Johnson menyebutkan, jika versi git Anda> 1.7.4, Anda juga dapat menggunakan git merge --abort .

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

Di halaman manual git merge

git merge --abort sama dengan git reset --merge saat MERGE_HEAD ada.

MERGE_HEAD hadir saat penggabungan dilakukan.

Juga, sehubungan dengan perubahan yang tidak dikomit ketika memulai penggabungan:

Jika Anda memiliki perubahan yang tidak ingin Anda lakukan sebelum Anda memulai penggabungan, cukup git stash sebelum penggabungan dan git stash pop setelah penggabungan selesai atau dibatalkan.

1610
29 марта '10 в 2:16 2010-03-29 02:16 jawabannya diberikan oleh Carl pada 29 Maret '10 di 2:16 2010-03-29 02:16
 git merge --abort 

Batalkan proses penyelesaian konflik yang sedang ber>

Jika ada perubahan yang tidak berfungsi dalam situasi kerja yang hadir saat penggabungan dimulai, git merge --abort dalam beberapa kasus tidak akan dapat memulihkan perubahan ini. Karena itu, Anda disarankan untuk selalu merekam atau mencatat perubahan Anda sebelum menjalankan git merge.

git merge --abort sama dengan git reset --merge saat MERGE_HEAD .

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

382
13 нояб. jawaban yang diberikan ignis 13 Nov. 2012-11-13 00:40 '12 pada 0:40 2012-11-13 00:40

Dalam kasus penggunaan khusus ini, Anda benar-benar tidak ingin memecah penggabungan, cukup selesaikan konflik dengan cara tertentu.

Tidak ada kebutuhan khusus untuk mengatur u>

Untuk file yang tidak terkait dalam konflik, git menyediakan basis file yang tersedia bersama, versi lokal dan jauh dalam indeks. (Di sini mereka dibaca untuk digunakan di alat tiga arah diff dengan git mergetool .) Anda dapat menggunakan 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 adalah dengan menggunakan versi jauh kata demi kata:

 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
20 сент. Balas diberikan oleh CB Bailey 20 Sep. 2008-09-20 13:41 '08 pada 1:41 siang 2008-09-20 13:41

Saya pikir Anda perlu git reset .

Berhati-hatilah bahwa git revert berarti sesuatu yang sangat berbeda dari, katakanlah, svn revert - di Subversion, suatu pengembalian akan membuang perubahan Anda (tanpa komitmen), mengembalikan file ke versi saat ini dari repositori, sementara git revert "membatalkan" komit.

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

72
19 сент. Balas diberikan oleh David Precious 19 Sep 2008-09-19 16:25 '08 pada 16:25 2008-09-19 16:25

Karena komentar berasumsi bahwa git reset --merge adalah nama samaran untuk git merge --abort , perlu dicatat bahwa git merge --abort setara dengan git reset --merge hanya jika MERGE_HEAD . Ini dapat ditemukan di git help untuk perintah merge.

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

Setelah penggabungan yang gagal, ketika tidak ada MERGE_HEAD , gabungan yang 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 menemukan git reset --merge jauh lebih kuat untuk skenario seperti yang dijelaskan, dan merger yang gagal pada umumnya.

29
02 апр. jawabannya diberikan Martin 02 Apr. 2015-04-02 15:16 '15 pada 15:16 2015-04-02 15:16

Karena Git 1.6.1.3 git checkout dapat memeriksa kedua sisi penggabungan:

 git checkout --theirs _widget.html.erb 
16
17 июля '10 в 4:29 2010-07-17 04:29 balasan diberikan kepada Alain O'Dea pada 17 Juli '10 di 4:29 2010-07-17 04:29

Alternatif untuk mempertahankan kondisi salinan yang berfungsi adalah:

 git stash git merge --abort git stash pop 

Saya biasanya menyarankan ini, karena ini sama efektifnya dengan penggabungan dalam Subversion, karena itu menjatuhkan hubungan percabangan di komit berikut.

14
13 июля '10 в 21:57 2010-07-13 21:57 Jawaban diberikan oleh Alain O'Dea pada 13 Juli '10 pada 21:57 2010-07-13 21:57

Dan jika Anda mengakhiri konflik gabungan dan tidak memiliki hal-hal untuk dilakukan, tetapi kesalahan gabungan ditampilkan setelah semua perintah berikut diterapkan,

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

hapus

.git \ index.lock

file [potong tempel ke lokasi lain jika pemulihan], lalu masukkan salah satu dari perintah berikut tergantung pada versi yang Anda inginkan.

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

Semoga ini bisa membantu !!!

9
11 апр. jawabannya diberikan oleh Nirav Mehta pada 11 April 2018-04-11 00:26 '18 pada 0:26 2018-04-11 00:26

Saya menemukan apa yang berfungsi untuk saya (mengembalikan satu file ke status pra-penggabungan):

 git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset* 
1
31 окт. Jawabannya diberikan oleh Malcolm Boekhoff pada 31 Oktober. 2017-10-31 03:56 '17 pada 3:56 2017-10-31 03:56