Jak zakończyć scalanie po rozwiązaniu moich konfliktów scalania?
Przeczytałem podstawowe rozgałęzianie i scalanie część Podręcznika społeczności Gita.
Więc podążam za nim i tworzę jedną gałąź: experimental
.
Potem Ja:
- switch to experimental branch (git checkout experimental)
- dokonaj kilku zmian
- commit it (git commit-a)
- switch to master branch (Git checkOut master)
- wprowadzić pewne zmiany i zatwierdzić tam
- switch back to experimental (Git checkout experimental)
- merge Master zmiana na experimental (git merge master)
-
Istnieją pewne konflikty, ale po ich rozwiązaniu zrobiłem 'git add myfile'
-
A teraz utknąłem, nie mogę wrócić do mistrza
When I do
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
I zrobiłem:
$ git rebase --abort
Brak rebase w toku?
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ć, abym mógł wrócić do mojej gałęzi mistrza?
9 answers
Gdy dojdzie do konfliktu podczas scalania, musisz zakończyć commit scalający ręcznie. Wygląda na to, że wykonałeś dwa pierwsze kroki, aby edytować pliki, które były skonfliktowane, a następnie uruchomić git add
na nich, aby oznaczyć je jako rozwiązane. Na koniec musisz zatwierdzić połączenie za pomocą git commit
. W tym momencie będziesz mógł ponownie przełączać gałęzie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-18 23:52:38
Jak zakończyć scalanie po rozwiązaniu moich konfliktów scalania?
W Git 2.12 (Q1 2017), będziesz miał bardziej naturalne polecenie:
git merge --continue
Zobacz commit c7d227d (15 Dec 2016) by Jeff King (peff
).
Zobacz commit 042e290, commit c261a87, commit 367ff69 (14 Dec 2016) by Chris Packham (cpackham
).
(dodany przez Junio C Hamano -- gitster
-- in commit 05f6e1b, 27 gru 2016)
Zobacz uwagi do wydania 2.12 .
merge
: Dodaj opcję "--continue
" jako synonim dla 'git commit
'Teach'
git merge
'the--continue
option which allows 'continuing' a / align = "left" /
Tradycyjnym sposobem zakończenia scalania po rozwiązaniu konfliktów jest użycie "git commit
".
Teraz z poleceniami takimi jak "git rebase
" i "git cherry-pick
"mając opcję"--continue
"dodanie takiej opcji do"git merge
" daje spójny UI.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 17:16:58
Jeśli kiedykolwiek utkniesz podczas scalania / rebase zawsze możesz
git reset --hard
Aby przywrócić pracę do stanu ostatniego commita. Spowoduje to utratę Twoich zmian z działającego drzewa, więc jeśli miałeś lokalne modyfikacje przed połączeniem, zostaną one usunięte po tym-dlatego wskazane jest, aby nie rozpoczynać scalania, gdy masz lokalne modyfikacje. :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-20 11:33:57
Po prostu git commit
to.
Opcjonalnie git abort
to:
wpadłem w konflikt scalający. Jak mogę przerwać połączenie?
Aby ułatwić życie z on merges zainstaluj kdiff3 i skonfiguruj go jako mergetool. 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 16:01:51
Ilekroć łączysz dwie gałęzie używając polecenia git merge brancha branchb
, są dwie możliwości:
-
Jedna gałąź (powiedzmy brancha) może zostać osiągnięta przez drugą gałąź (powiedzmy branchb), wykonując jej commity history.In w tym przypadku git po prostu przesuwa głowę do przodu, aby wskazać ostatnią gałąź (w tym przypadku branchb).
2.Ale jeśli dwie gałęzie rozeszły się w jakimś starszym punkcie, to git tworzy nową migawkę i dodaje nowy commit, który do niej wskazuje. Tak więc w przypadku, jeśli jest brak konfliktu między gałęziami, które łączysz, git płynnie tworzy nowy commit.
Uruchom
git log
, aby zobaczyć commit po połączeniu dwóch niezwiązanych ze sobą gałęzi.
Teraz wróćmy do interesującego przypadku, gdy między scalającymi się gałęziami występują konflikty. Cytuję to ze strony https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Git nie stworzył automatycznie nowego połączenia / align = "left" / To wstrzymało proces podczas rozwiązywania konfliktu. Jeśli chcesz zobaczyć, które pliki są niezergowane w dowolnym momencie po konflikcie scalania, możesz uruchomić
git status
Więc w przypadku konfliktów scalania, musisz rozwiązać konflikt, a następnie dodać zmiany, które wprowadziłeś do strefy przejściowej 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 twoje pytanie . Również odwiedź powyższy link do zrozum wszystko w szczegółach . W razie jakichkolwiek pytań proszę o komentarz poniżej, chętnie pomogę.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-20 05:57:31
Kolejne kroki po ręcznym rozwiązaniu konfliktów to:-
- git add .
- Git status (pokaże ci, które polecenia są niezbędne do kontynuowania procedury automatycznego scalania)
- [polecenie git sugeruje, np.
git merge --continue
,git cherry-pick --continue
,git rebase --continue
]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 14:00:46
Pierwszą rzeczą, którą chcę wyjaśnić jest to, że nazwy gałęzi są tylko aliasem do określonego commita. commit jest tym, co git działa, kiedy ciągniesz, naciskasz merge i tak dalej. Każdy commit ma unikalny identyfikator.
Kiedy wykonujesz $ git merge, to dzieje się tak, że git próbuje przewijać Twoją bieżącą gałąź do zatwierdzonego commita (innymi słowy obie nazwy gałęzi wskazują na ten sam commit.) Ten scenariusz jest najłatwiejszy w obsłudze dla git, ponieważ nie ma nowego / align = "left" / Pomyśl o mistrzu skaczącym na lilipada, na którym Twoja gałąź się ochładza. Można ustawić flagę --no-FF, w którym to przypadku git utworzy nowy commit niezależnie od tego, czy doszło do konfliktu kodu.
W sytuacji, gdy występują konflikty kodu pomiędzy dwiema gałęziami, które próbujesz scalić (zwykle dwie gałęzie, których historia zmian ma wspólne zmiany w przeszłości), szybkie przewijanie nie będzie działać. git może nadal być w stanie automatycznie scalić pliki, o ile ta sama linia nie została zmieniona przez obie gałęzie w pliku kolidującym ze sobą. w takim przypadku, git Scali dla Ciebie kolidujące ze sobą pliki i automatycznie zatwierdzi je. Możesz sprawdzić, jak zrobił git, wykonując $ Git diff --cached. Możesz też przekazać flagę --no-commit komendzie merge, która pozostawi zmodyfikowane pliki w indeksie, które musisz dodać I zatwierdzić. Ale możesz $ git diff te pliki, aby sprawdzić, co zmieni się scalenie.
Trzeci scenariusz jest wtedy, gdy są konflikty git nie może automatycznie rozwiąż. W takim przypadku musisz ręcznie połączyć je. Moim zdaniem jest to najłatwiejsze do zrobienia z merge taken, jak Araxis merge lub p4merge (free). Tak czy inaczej, musisz zrobić każdy plik jeden po drugim. Jeśli połączenie kiedykolwiek wydaje się zablokowane, użyj $ git merge --continue, aby go popchnąć. Git powinien ci powiedzieć, jeśli nie może kontynuować, a jeśli tak, to dlaczego nie. Jeśli czujesz, że połączyłeś się w pewnym momencie, możesz zrobić $ git merge --abort, a każde scalenie cofnie się i możesz zacząć od nowa. Kiedy gotowe, każdy scalony plik będzie zmodyfikowanym plikiem, który należy dodać i zatwierdzić. Możesz sprawdzić, gdzie znajdują się pliki za pomocą $ Git status. Jeśli scalone pliki nie zostały jeszcze zatwierdzone. Musisz to zrobić, aby zakończyć połączenie. Musisz zakończyć scalanie lub przerwać scalanie, zanim będziesz mógł przełączyć gałęzie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-25 01:32:24
Konflikt scalania występuje, gdy dwie gałęzie, które próbujesz połączyć, zmieniły tę samą część tego samego pliku. Listę konfliktów można wygenerować za pomocą git status
.
W przypadku napotkania konfliktowej linii, Git będzie edytował zawartość dotkniętych plików za pomocą wizualnych wskaźników, które zaznaczają obie strony konfliktu.
<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch
Gdy naprawisz skonfliktowane pliki i będziesz gotowy do scalenia, wystarczy uruchomić git add
i git commit
, aby wygenerować commit scalający. Raz wprowadzono commit, git push
zmiany w gałęzi.
Artykuł referencyjny: Git merge.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-22 12:06:38
Po dodaniu wszystkich plików, następnym krokiem jest " git commit".
"Git status" podpowie, co zrobić: pliki do dodania są wymienione na dole, a gdy wszystkie zostaną wykonane, zasugeruje commit na górze, gdzie wyjaśnia status scalenia bieżącej gałęzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-19 12:44:39