Git объединить ошибки


264

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

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

По существу то , что вы хотите сделать , это объединить вашу тему филиал 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: твиттер sweska $ git checkout master error: Ваши локальные изменения в следующих файлах будут перезаписаны checkout: 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.