Saya telah membaca bagian Dasar Cabang dan Penggabungan Buku Komunitas Git.
Jadi saya mengikutinya dan membuat satu cabang: experimental
.
Maka saya:
- beralih ke cabang eksperimental (eksperimental git checkout)
- membuat banyak perubahan
- komit (git commit -a)
- beralih ke cabang utama (master checkout git)
- buat beberapa perubahan dan komit di sana
- beralih kembali ke eksperimental (eksperimen checkout git)
- gabungkan perubahan master ke eksperimental (git merge master)
ada beberapa konflik tetapi setelah saya menyelesaikannya, saya 'git add myfile'
Dan sekarang saya mandek, saya tidak bisa kembali ke master
ketika saya melakukannya
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
dan saya lakukan:
$ git rebase --abort
Tidak ada rebase dalam proses?
dan saya lakukan:
$ git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
Apa yang bisa saya lakukan agar saya bisa kembali ke cabang utama saya?
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
, hasilnyafatal: cannot do a partial commit during a merge.
. Dan tentu saja, "Komitmen parsial" tampaknya tidak didokumentasikan atau didiskusikan di mana pun di halaman manual git. Pertunjukangit merge
setelah perbaikan menghasilkanPlease, commit your changes before you can merge.
Apa alat keledai yang rusak ...git merge --continue
. Lihat jawaban saya di bawah iniJawaban:
Ketika ada konflik selama penggabungan, Anda harus menyelesaikan komit gabungan secara manual. Kedengarannya seperti Anda telah melakukan dua langkah pertama, untuk mengedit file yang bertentangan dan kemudian menjalankannya
git add
untuk menandai mereka sebagai terselesaikan. Akhirnya, Anda harus benar-benar melakukan penggabungangit commit
. Pada titik itu Anda akan dapat berganti cabang lagi.sumber
git commit -am "your commit message"
lakukan penambahan dan komit secara bersamaan.git commit
tidak bekerja. Dan yang terbaik adalah menggunakannya untuk mendapatkan pesan komit gabungan digabung untuk Anda. Saya menghindari `git commit -am" karena ini akan menimpa pesangit push
.Dengan Git 2.12 (Q1 2017), Anda akan memiliki perintah yang lebih alami:
Lihat komit c7d227d (15 Des 2016) oleh Jeff King (
peff
) .Lihat komit 042e290 , komit c261a87 , komit 367ff69 (14 Des 2016) oleh Chris Packham (
cpackham
) .(Digabung oleh Junio C Hamano -
gitster
- dalam komit 05f6e1b , 27 Des 2016)Lihat 2.12 catatan rilis .
sumber
Jika Anda pernah terjebak selama penggabungan / rebase Anda selalu bisa
untuk mengembalikan pekerjaan Anda ke kondisi komit terakhir. Ini akan kehilangan perubahan Anda dari pohon kerja jadi jika Anda memiliki modifikasi lokal sebelum penggabungan mereka akan hilang setelah ini — itulah sebabnya mengapa disarankan untuk tidak memulai penggabungan ketika Anda memiliki modifikasi lokal. :)
sumber
git reset --hard
membuang perubahan yang tidak dikomitgit merge --abort
, yang tidak berisiko kehilangan apa pun?Hanya
git commit
itu.Secara opsional
git abort
:Saya mengalami konflik gabungan. Bagaimana saya bisa membatalkan penggabungan?
Untuk membuat hidup lebih mudah dengan on merge, instal kdiff3 dan konfigurasikan sebagai mergetool. Instruksi: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
Halaman itu berisi video ini: https://www.youtube.com/watch?v=Cc4xPp7Iuzo
sumber
Setiap kali Anda menggabungkan dua cabang menggunakan perintah
git merge brancha branchb
, Ada dua kemungkinan:Satu cabang (katakanlah brancha) dapat dijangkau oleh cabang lainnya (katakanlah branchb) dengan mengikuti sejarah komitnya. Dalam hal ini git cukup memajukan kepala untuk menunjuk ke cabang baru-baru ini (dalam hal ini branchb).
2.Tetapi jika kedua cabang telah menyimpang pada titik yang lebih lama maka git membuat snapshot baru dan menambahkan komit baru yang menunjuk padanya. Jadi jika tidak ada konflik antara cabang yang Anda gabungkan, git dengan lancar membuat komit baru.
Sekarang kembali ke kasus menarik ketika ada konflik penggabungan antara cabang-cabang yang bergabung. Saya mengutip ini dari halaman https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Jadi jika ada konflik gabungan, Anda perlu menyelesaikan konflik kemudian tambahkan perubahan yang telah Anda buat ke area pementasan menggunakan
git add filename
dan kemudian komit perubahan dengan menggunakan perintahgit commit
yang dijeda oleh git karena konflik. Saya harap ini menjelaskan Anda pertanyaan. Kunjungi juga tautan di atas untuk pemahaman terperinci. Jika ada pertanyaan, silakan komentar di bawah ini, saya akan dengan senang hati membantu.sumber
Langkah-langkah selanjutnya setelah menyelesaikan konflik secara manual adalah: -
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]sumber
error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
git merge --continue
, yang sedang saya coba lakukan, menghasilkanerror: unknown option 'continue'
. Saya yakin jawaban Anda salah karenagit-merge
halaman manual tidak mencantumkannya. Git versi apa yang Anda gunakan? Saya menggunakangit version 1.8.5.2 (Apple Git-48)
. Saya juga mencoba dengan MacPortsgit version 2.9.3
.git commit
Konflik gabungan terjadi ketika dua cabang yang Anda coba gabungkan keduanya mengubah bagian yang sama dari file yang sama. Anda dapat membuat daftar konflik dengan
git status
.Ketika baris yang konflik ditemui, Git akan mengedit konten file yang terpengaruh dengan indikator visual yang menandai kedua sisi konten yang bertentangan.
Ketika Anda memperbaiki file yang konflik dan Anda siap untuk bergabung, yang harus Anda lakukan adalah menjalankan
git add
dangit commit
menghasilkan komit gabungan. Setelah komit dibuat,git push
perubahan ke cabang.Artikel referensi: Git merge .
sumber
Setelah semua file ditambahkan, langkah selanjutnya adalah " git commit ".
"git status" akan menyarankan apa yang harus dilakukan: file yang belum ditambahkan terdaftar di bagian bawah, dan setelah semuanya selesai, itu akan menyarankan komit di atas, di mana ia menjelaskan status gabungan dari cabang saat ini.
sumber
Hal pertama yang ingin saya jelaskan adalah bahwa nama cabang hanyalah alias untuk komit tertentu. komit adalah apa yang berhasil dilakukan git, saat Anda menarik, mendorong penggabungan, dan sebagainya. Setiap komit memiliki id unik.
Ketika Anda melakukan penggabungan $ git, yang sebenarnya terjadi adalah git mencoba memajukan cabang Anda saat ini ke komit tempat cabang yang direferensikan aktif (dengan kata lain kedua nama cabang menunjuk ke komit yang sama.) Skenario ini adalah yang termudah untuk git untuk berurusan, karena tidak ada komitmen baru. Pikirkan tentang master yang melompat ke lilipad yang sedang ditumbuhi cabang Anda. Adalah mungkin untuk mengatur flag --no-ff, di mana git akan membuat komit baru terlepas dari apakah ada konflik kode.
Dalam situasi di mana ada konflik kode antara dua cabang yang Anda coba gabungkan (biasanya dua cabang yang sejarah komitnya memiliki komit yang sama di masa lalu), fast forward tidak akan berfungsi. git mungkin masih dapat menggabungkan file secara otomatis, selama baris yang sama tidak diubah oleh kedua cabang dalam file yang saling bertentangan. dalam hal ini, git akan menggabungkan file yang bertentangan untuk Anda DAN secara otomatis mengkomitnya. Anda dapat melihat pratinjau bagaimana git melakukannya dengan melakukan $ git diff --cached. Atau Anda bisa meneruskan flag --no-commit ke perintah penggabungan, yang akan meninggalkan file yang dimodifikasi dalam indeks Anda yang harus Anda tambahkan dan komit. Tetapi Anda dapat $ git mengubah file-file ini untuk meninjau perubahan yang akan digabung.
Skenario ketiga adalah ketika ada konflik, git tidak dapat secara otomatis menyelesaikannya. Dalam hal ini Anda harus menggabungkannya secara manual. Menurut pendapat saya ini paling mudah dilakukan dengan menggabungkan mengambil, seperti araxis menggabungkan atau p4merge (gratis). Either way, Anda harus melakukan setiap file satu per satu. Jika penggabungan tersebut tampaknya macet, gunakan $ git merge --continue, untuk menyikutinya. Git harus memberi tahu Anda jika itu tidak dapat dilanjutkan, dan jika demikian mengapa tidak. Jika Anda merasa telah meningkatkan penggabungan di beberapa titik, Anda dapat melakukan $ git merge --abort, dan penggabungan apa pun akan dibatalkan dan Anda dapat memulai dari awal. Setelah selesai, setiap file yang Anda gabungkan akan menjadi file yang dimodifikasi yang perlu ditambahkan dan dikomit. Anda dapat memverifikasi di mana file-file itu dengan status $ git. Jika Anda belum melakukan file yang digabungkan. Anda perlu melakukan itu untuk menyelesaikan penggabungan.
sumber
Mungkin terlambat. Ini Terjadi karena KEPALA git Anda tidak diperbarui. pujian ini akan menyelesaikannya
git reset HEAD
.sumber