Git ошибки слияния

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

Ответ 1

Стоит понять, что означают эти сообщения об ошибках - 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 answer, заключается в том, что если вы поделились своей предыдущей ветвью с кем-либо, это создаст проблемы для них, поскольку, если история двух ветвей расходится, вы будете публиковать перезаписанную историю.

По сути, вы хотите объединить ветвь вашего тега 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 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

Ответ 2

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

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

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

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

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