Git объединить ошибки - PullRequest
234 голосов
/ 15 мая 2011

У меня есть ветка 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.

Ответы [ 4 ]

473 голосов
/ 15 мая 2011

Стоит понять, что означают эти сообщения об ошибках - 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
39 голосов
/ 15 мая 2011
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
5 голосов
/ 31 января 2018

, как предложено в git status,

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

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

Я использовал git add для завершения слияния, затем git checkout работает отлично.

0 голосов
/ 19 марта 2018

git commit -m "Исправлен конфликт с объединенным мастером."

...