Git menggabungkan kesalahan


264

Saya memiliki cabang git yang dipanggil 9-sign-in-outdengan kode yang berfungsi dengan baik, dan saya ingin mengubahnya menjadi master. Saya saat ini di cabang utama.

$ git branch
9-sign-in-out
* master

Saya mencoba untuk beralih ke 9-sign-in-outcabang, tetapi itu tidak memungkinkan saya untuk:

$ git checkout 9-sign-in-out
app/helpers/application_helper.rb: needs merge
config/routes.rb: needs merge
error: you need to resolve your current index first

Tahu bagaimana saya bisa mengabaikan semua kesalahan cabang master dan mengubah 9-sign-in-outcabang menjadi master? Mungkin git rebase ? Tetapi saya tidak ingin kehilangan kode di 9-sign-in-outcabang.


Maksud Anda, Anda tidak ingin kehilangan kode tidak terhubung dalam 9-masuk-keluar?
Mauvis Ledford

@Mauvis: Saya sudah melakukan kode saya di cabang 9-masuk-keluar.
Sayanee

Jawaban:


531

Sebaiknya pahami maksud pesan kesalahan itu - needs mergedan error: you need to resolve your current index firsttunjukkan bahwa penggabungan gagal, dan bahwa ada konflik dalam file tersebut. Jika Anda memutuskan bahwa penggabungan apa pun yang Anda coba lakukan adalah ide yang buruk, Anda dapat mengembalikan semuanya dengan:

git reset --merge

Namun, jika tidak, Anda harus menyelesaikan konflik gabungan tersebut, seperti yang dijelaskan dalam manual git .


Setelah Anda mengatasinya dengan teknik apa pun, Anda harus dapat checkout 9-sign-in-outcabang. Masalah dengan hanya mengubah nama Anda 9-sign-in-outmenjadi master, seperti yang disarankan dalam jawaban wRAR adalah bahwa jika Anda telah berbagi cabang master sebelumnya dengan siapa pun, ini akan menciptakan masalah bagi mereka, karena jika sejarah kedua cabang berbeda, Anda akan menerbitkan ditulis ulang sejarah.

Pada dasarnya apa yang ingin Anda lakukan adalah menggabungkan cabang topik Anda 9-sign-in-outke dalam mastertetapi tetap mempertahankan versi file di cabang topik. Anda bisa melakukan ini dengan langkah-langkah berikut:

# Switch to the topic branch:
git checkout 9-sign-in-out

# Create a merge commit, which looks as if it's merging in from master, but is
# actually discarding everything from the master branch and keeping everything
# from 9-sign-in-out:
git merge -s ours master

# Switch back to the master branch:
git checkout master

# Merge the topic branch into master - this should now be a fast-forward
# that leaves you with master exactly as 9-sign-in-out was:
git merge 9-sign-in-out

1
Mark, saya akhirnya mengerti apa yang Anda katakan setelah saya mendapatkan kesalahan lagi untuk bergabung sekarang. Namun, saya mengalami kesalahan ini ::::::::::::: Sayanee: twitter sweska $ git checkout master error: Perubahan lokal Anda ke file berikut akan ditimpa dengan checkout: webrat.log Tolong, komit perubahan atau simpanan Anda sebelum Anda bisa berganti cabang. Batalkan ::::::::::::::::: cara apa pun, untuk menggunakan webrat.log di cabang dan membuatnya bergabung dengan master?
Sayanee

1
@Sayanee: itu kesalahan yang berbeda, yang timbul dari keadaan yang berbeda, dan akan lebih baik untuk mengajukan pertanyaan baru tentang itu jika Anda bingung karenanya. (Namun, secara singkat, git menghentikan Anda dari berpindah cabang karena itu akan menimpa perubahan yang tidak dikomit webrat.log.)
Mark Longair

Saya dulu hanya menyelesaikan semuanya dan menutupinya. Tapi ini lebih baik.
sudo

43
git checkout -f 9-sign-in-out # change branch, discarding all local modifications
git branch -M master # rename the current branch to master, discarding current master

3
Saya pikir lebih bersih untuk mengatur ulang penggabungan seperti yang disarankan Markus di bawah daripada memaksa checkout.
Thomas

8

seperti yang disarankan dalam git status,

Unmerged paths:                                                                                                                                
(use "git add <file>..." to mark resolution)                                                                                                 

    both modified:   a.jl                                  
    both modified:   b.jl

Saya biasa git addmenyelesaikan penggabungan, lalu git checkoutbekerja dengan baik.



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.