Błędy scalania Git

264

Mam gałąź git o nazwie 9-sign-in-out z doskonale działającym kodem i chcę go przekształcić w master. Obecnie jestem w oddziale głównym.

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

Próbuję przejść do 9-sign-in-outoddziału, ale nie pozwala mi to:

$ 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

Masz pomysł, jak mogę zignorować wszystkie błędy gałęzi master i zamienić 9-sign-in-outgałąź w master? Może git rebase ? Ale nie chcę zgubić kodu w 9-sign-in-outoddziale.

Sayanee
źródło
Czy masz na myśli, że nie chcesz stracić nieprzypisanego kodu podczas 9-wylogowania?
Mauvis Ledford
@Mauvis: Już zatwierdziłem swoje kody w oddziale 9-sign-in-out.
Sayanee

Odpowiedzi:

531

Warto zrozumieć, co oznaczają te komunikaty o błędach - needs mergei error: you need to resolve your current index firstwskazać, że scalenie nie powiodło się i że w tych plikach występują konflikty. Jeśli zdecydowałeś, że cokolwiek, co próbujesz wykonać, było w końcu złym pomysłem, możesz przywrócić normalność dzięki:

git reset --merge

W przeciwnym razie powinieneś rozwiązać te konflikty scalania, jak opisano w podręczniku git .


Gdy już poradzisz sobie z tą techniką, powinieneś być w stanie sprawdzić kasę 9-sign-in-out. Problem z samą zmianą nazwy 9-sign-in-outna master, jak sugerowano w odpowiedzi wRAR, polega na tym, że jeśli udostępniłeś komukolwiek poprzednią gałąź master, spowoduje to dla nich problemy, ponieważ jeśli historia dwóch gałęzi się rozdzieli, opublikujesz przepisane od nowa historia.

Zasadniczo, co chcesz zrobić, to połączyć swój temat oddział 9-sign-in-outw masterale dokładnie zachować wersje plików w temacie branży. Możesz to zrobić, wykonując następujące czynności:

# 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
Mark Longair
źródło
1
Mark, w końcu zrozumiałem, co mówiłeś po tym, jak znów dostałem błąd, aby się połączyć. Mam jednak ten błąd ::::::::::::: Sayanee: twitter sweska $ git checkout master error: Twoje lokalne zmiany w następujących plikach zostałyby zastąpione przez checkout: webrat.log Proszę, zatwierdzić zmiany lub ukryj je, zanim będziesz mógł zmienić oddziały. Przerwanie ::::::::::::::::: w jakikolwiek sposób, aby użytkownik webrat.log w oddziale i połączyć go z masterem?
Sayanee
1
@Sayanee: to inny błąd wynikający z różnych okoliczności i lepiej byłoby zadać nowe pytanie na ten temat, jeśli się go pomylisz. (W skrócie, git powstrzymuje cię od zmiany gałęzi, ponieważ webrat.log
zastąpiłoby
Kiedyś po prostu wszystko zapisywałem i ponownie się klonowałem. Ale to jest ładniejsze.
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
wRAR
źródło
3
Myślę, że znacznie łatwiej jest zresetować scalanie, jak sugerował Mark poniżej, zamiast wymuszania kasy.
Thomas
8

jak sugeruje git status,

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

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

Kiedyś git addkończyłem scalanie, a potem git checkoutdziała dobrze.

Jingpeng Wu
źródło
1

mój problem to (master | REBASE 1/1)

to polecenie działało dla mnie

 git rebase --skip
Muhammad Shoaib Murtaza
źródło
-6

git commit -m "Scalony master naprawił konflikt."

Parasp2008
źródło