Помилки злиття Git


264

У мене є гіт git 9-sign-in-outз ідеально працюючим кодом, і я хочу перетворити його на майстер. Зараз я перебуваю на головній галузі.

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

Я намагаюся перейти до 9-sign-in-outгілки, але це не дозволяє мені:

$ 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

Будь-яка ідея, як я можу проігнорувати всі помилки головного відділення та перетворити 9-sign-in-outгілку на головну? Може бути, git rebase ? Але я не хочу втрачати код у 9-sign-in-outгалузі.


Ви маєте на увазі, що не хочете втрачати свій невпорядкований код під час 9-входу?
Мавіс Ледфорд

@Mauvis: Я вже ввів свої коди у гілці 9-реєстрації.
Саяне

Відповіді:


531

Варто зрозуміти, що означають ці повідомлення про помилку - needs mergeі error: you need to resolve your current index firstвказати, що злиття не вдалося, і що в цих файлах є конфлікти. Якщо ви вирішили, що будь-яке злиття ви намагалися зробити, це все-таки погана ідея, ви можете повернути все в норму за допомогою:

git reset --merge

Однак в іншому випадку слід вирішити ці конфліктні злиття, як описано в посібнику з git .


Після того, як ви вирішите це за будь-якою технікою, ви зможете оформити 9-sign-in-outвідділення. Проблема тільки перейменування 9-sign-in-outдо master, як це було запропоновано в відповідь wRAR в тому , що якщо ви поділилися попередній майстер гілку з ким - небудь, це створить проблеми для них, так як якщо історія двох гілок розходилися, ви будете видавати переписаний історія.

За суті то , що ви хочете зробити , це об'єднати вашу тему філія 9-sign-in-outв masterале точно зберегти версії файлів в розділі галузі. Це можна зробити за допомогою наступних кроків:

# 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
Марку, я нарешті зрозумів, що ти казав, після того, як я знову отримав помилку, щоб зараз злитися. Я, однак, маю цю помилку ::::::::::::: Sayanee: twitter sweska $ git check master master error: Ваші локальні зміни до наступних файлів будуть замінені замовленням: webrat.log Будь ласка, введіть зміни або приховуйте їх, перш ніж ви зможете перемикати гілки. Аборти :::::::::::::::::: будь-яким способом користуватися webrat.log у гілці та змусити його злитися з головним?
Саяні

1
@Sayanee: це інша помилка, що виникає внаслідок різних обставин, і краще буде задати нове запитання про це, якщо вас це бентежить. (Коротко, однак, Git зупиняє вас від перемикання гілок, оскільки це перезаписать незапущені зміни webrat.log.)
Марк Лонгейр,

Раніше я все-таки перевозив цілу річ і відновлювався. Але це приємніше.
судо

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
Я думаю, що набагато чистіше буде скинути злиття, як запропонував Марк нижче, а не примушувати оформляти замовлення.
Томас

8

як запропоновано в git status,

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

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

Я раніше git addзакінчував злиття, тоді git checkoutдобре працює.



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.