Przeczytałem sekcję Podstawowe rozgałęzianie i scalanie w Git Community Book.
Więc śledzę je i utworzyć jeden oddział: experimental
.
Potem ja:
- przejdź do gałęzi eksperymentalnej (git Checkout eksperymentalna)
- dokonać wielu zmian
- commit it (git commit -a)
- przejdź do gałęzi master (git checkout master)
- wprowadź zmiany i zatwierdź je
- przełącz się z powrotem na eksperymentalny (git Checkout eksperymentalny)
- scal master master do eksperymentalnego (git merge master)
są pewne konflikty, ale po ich rozwiązaniu „dodałem mój plik”
A teraz utknąłem, nie mogę wrócić do mistrza
kiedy robię
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
i zrobiłem:
$ git rebase --abort
Nie trwa proces naliczania?
i zrobiłem :
$ git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
Co mogę zrobić, aby móc wrócić do głównej gałęzi?
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
, spowoduje tofatal: cannot do a partial commit during a merge.
. I oczywiście „częściowe zatwierdzenia” nie wydają się być dokumentowane ani omawiane nigdzie na stronach git man. Wykonaniegit merge
poprawki po zakończeniu powoduje,Please, commit your changes before you can merge.
że narzędzie What a broken ass ...git merge --continue
. Zobacz moją odpowiedź poniżejOdpowiedzi:
Jeśli podczas łączenia występuje konflikt, musisz zakończyć zatwierdzanie scalania ręcznie. Wygląda na to, że wykonałeś dwa pierwsze kroki, aby edytować konflikt plików, a następnie uruchomić
git add
je, aby oznaczyć je jako rozwiązane. Na koniec musisz wykonać scaleniegit commit
. W tym momencie będziesz mógł ponownie przełączać gałęzie.źródło
git commit -am "your commit message"
wykonać dodawanie i zatwierdzanie jednocześnie.git commit
działa. I najlepiej go użyć, aby wypełnić domyślną wiadomość zatwierdzenia scalania.git push
.Dzięki Git 2.12 (Q1 2017) będziesz miał bardziej naturalne polecenia:
Zobacz commit c7d227d (15 grudnia 2016 r.) Autor: Jeff King (
peff
) .Zobacz zatwierdzenie 042e290 , zatwierdzenie c261a87 , zatwierdzenie 367ff69 (14 grudnia 2016 r.) Autor: Chris Packham (
cpackham
) .(Połączone przez Junio C Hamano -
gitster
- w commit 05f6e1b , 27 grudnia 2016)Zobacz informacje o wersji 2.12 .
źródło
Na wypadek, gdybyś utknął podczas łączenia / rebase, zawsze możesz
aby przywrócić pracę do stanu ostatniego zatwierdzenia. Spowoduje to utratę zmian w działającym drzewie, więc jeśli miałeś lokalne modyfikacje przed scaleniem, znikną one po tym - dlatego wskazane jest, aby nie rozpoczynać scalania, gdy masz lokalne modyfikacje. :)
źródło
git reset --hard
odrzuca niezaangażowane zmianygit merge --abort
, który nie ma ryzyka utraty niczego?Po prostu
git commit
to.Opcjonalnie
git abort
:wpadłem na konflikt scalania. Jak mogę przerwać scalanie?
Aby ułatwić życie przy scalaniu, zainstaluj kdiff3 i skonfiguruj go jako narzędzie do łączenia. Instrukcje: http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
Ta strona zawiera ten film: https://www.youtube.com/watch?v=Cc4xPp7Iuzo
źródło
Ilekroć łączysz dwie gałęzie za pomocą polecenia
git merge brancha branchb
, istnieją dwie możliwości:Do jednej gałęzi (powiedzmy gałęzi) można dotrzeć do drugiej gałęzi (powiedzmy gałęzi b), śledząc historię zatwierdzeń. W tym przypadku git po prostu szybko przewiń do przodu, aby wskazać najnowszą gałąź (w tym przypadku gałąź b).
2. Ale jeśli dwie gałęzie rozeszły się w jakimś starszym punkcie, git tworzy nową migawkę i dodaje nowe zatwierdzenie, które wskazuje na nią. Jeśli więc nie ma konfliktu między łączonymi gałęziami, git płynnie tworzy nowe zatwierdzenie.
Teraz wracam do interesującego przypadku, w którym występują konflikty scalania między łączącymi się gałęziami. Cytuję to na stronie https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Więc w przypadku konfliktów scalania, musisz rozwiązać konflikt, a następnie dodać zmiany, które wprowadziłeś do obszaru pomostowego za pomocą,
git add filename
a następnie zatwierdzić zmiany za pomocą polecenia,git commit
które zostało wstrzymane przez git z powodu konfliktu. Mam nadzieję, że to wyjaśnia pytanie. Odwiedź także powyższy link, aby uzyskać szczegółowe informacje. W przypadku jakichkolwiek pytań prosimy o komentarz poniżej, chętnie pomogę.źródło
Kolejne kroki po ręcznym rozwiązaniu konfliktów to: -
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]źródło
error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
git merge --continue
, co właśnie próbuję zrobić, skutkujeerror: unknown option 'continue'
. Jestem pewien, że twoja odpowiedź jest zła, ponieważgit-merge
strona podręcznika nie zawiera jej. Jakiej wersji Git używasz? Używamgit version 1.8.5.2 (Apple Git-48)
. Próbowałem także z MacPortsgit version 2.9.3
.git commit
Konflikt scalania występuje, gdy dwie gałęzie, które próbujesz scalić, zmieniły tę samą część tego samego pliku. Możesz wygenerować listę konfliktów z
git status
.Gdy napotkamy konfliktową linię, Git edytuje zawartość dotkniętych plików za pomocą wskaźników wizualnych, które oznaczają obie strony sprzecznej treści.
Gdy naprawisz skonfliktowane pliki i będziesz gotowy do scalenia, wystarczy uruchomić
git add
igit commit
wygenerować zatwierdzenie scalania. Po dokonaniu zatwierdzeniagit push
zmiany w gałęzi.Artykuł referencyjny: Git merge .
źródło
Po dodaniu wszystkich plików następnym krokiem jest „ git commit ”.
„git status” zasugeruje, co należy zrobić: pliki jeszcze do dodania są wymienione na dole, a gdy wszystkie zostaną wykonane, zasugeruje zatwierdzenie u góry, gdzie wyjaśnia stan scalenia bieżącej gałęzi.
źródło
Pierwszą rzeczą, którą chcę wyjaśnić, jest to, że nazwy gałęzi są tylko aliasem dla konkretnego zatwierdzenia. zatwierdzenie jest tym, co działa git, kiedy ciągniesz, pchasz scalanie i tak dalej. Każde zatwierdzenie ma unikalny identyfikator.
Kiedy wykonujesz $ git merge, git próbuje szybko przewinąć bieżącą gałąź do zatwierdzenia, do którego odwołuje się gałąź (innymi słowy, obie nazwy gałęzi wskazują na to samo zatwierdzenie.) Ten scenariusz jest najłatwiejszy dla git do czynienia, ponieważ nie ma nowego zatwierdzenia. Pomyśl o mistrzu wskakującym na lilipada, na którym odpoczywa twoja gałąź. Możliwe jest ustawienie flagi --no-ff, w którym to przypadku git utworzy nowe zatwierdzenie, niezależnie od tego, czy wystąpiły konflikty kodu.
W sytuacji, gdy występują konflikty kodu między dwiema gałęziami, które próbujesz scalić (zwykle dwie gałęzie, których historia zatwierdzeń ma wspólne zatwierdzenie w przeszłości), szybkie przewijanie do przodu nie działa. git może nadal być w stanie automatycznie scalać pliki, o ile ta sama linia nie została zmieniona przez obie gałęzie w pliku powodującym konflikt. w takim przypadku git połączy dla ciebie pliki powodujące konflikt i automatycznie je zatwierdzi. Możesz zobaczyć podgląd działania git, wykonując $ git diff --cached. Możesz też przekazać flagę --no-commit do polecenia scalania, co spowoduje pozostawienie zmodyfikowanych plików w indeksie, które musisz dodać i zatwierdzić. Ale możesz $ git różnicować te pliki, aby sprawdzić, co zmieni scalanie.
Trzeci scenariusz dotyczy konfliktów, których git nie może automatycznie rozwiązać. W takim przypadku musisz je ręcznie scalić. Moim zdaniem jest to najłatwiejsze do wykonania ze scaleniem, takim jak scalenie araxis lub p4merge (za darmo). Tak czy inaczej, musisz wykonać każdy plik jeden po drugim. Jeśli scalanie wydaje się być zablokowane, użyj $ git merge - kontynuuj, aby przesuwać go dalej. Git powinien powiedzieć ci, czy nie może kontynuować, a jeśli tak, to dlaczego nie. Jeśli w pewnym momencie poczujesz, że scaliłeś scalenie, możesz wykonać $ git merge --abort, a wszelkie scalenia zostaną cofnięte i możesz zacząć od nowa. Po zakończeniu każdy scalony plik będzie plikiem zmodyfikowanym, który należy dodać i zatwierdzić. Możesz sprawdzić, gdzie znajdują się pliki ze statusem $ git. Jeśli scalone pliki nie zostały jeszcze zatwierdzone. Musisz to zrobić, aby zakończyć scalanie.
źródło
Może być późno Dzieje się tak, ponieważ twoja git HEAD nie została zaktualizowana. to pochwała rozwiązałoby to
git reset HEAD
.źródło