Mam problem, którego nie wiem, jak rozwiązać.
Zrobiłem rebase na mistrza z mojej filii:
git rebase master
i otrzymałem następujący błąd
First, rewinding head to replay your work on top of it...
Applying: checkstyled.
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging AssetsLoader.java
CONFLICT (content): Merge conflict in AssetsLoader.java
Failed to merge in the changes.
Patch failed at 0001 checkstyled.
Poszedłem więc do mojego ulubionego edytora, naprawiłem konflikt 1 linii, zapisałem plik, wykonałem status git i otrzymałem następujące dane wyjściowe:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: PassengerContactHandler.java
#
# Unmerged paths:
# (use "git reset HEAD <file>..." to unstage)
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: AssetsLoader.java
#
Zrobiłem git dodać AssetsLoader.java i status git i otrzymałem następujące informacje:
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: AssetsLoader.java
# modified: PassengerContactHandler.java
#
a kiedy zrobiłem git rebase --continue, otrzymuję:
git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
Wiem, że mogę pominąć poprawkę i kontynuować rebase, ale nie jestem pewien, czy zmiany w PassengerContactHandler.java zostaną przeniesione do mojej gałęzi, czy nie.
więc nie jestem pewien, jak mam postępować?
Edycja: czy to możliwe, że plik z rozwiązanym konfliktem jest dokładnie taki sam, jak wersja oryginalna?
Wielkie dzięki, Lucas
Edytuj, znowu mi się to przydarzyło:
Po prostu znowu mi się to przydarzyło
(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: assets/world/level1/Level-1.xml
# modified: George.java
# modified: DefaultPassenger.java
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# mb-art/originalAssets/27dec/
((307ac0d ...) | REBASE) $ git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add
git - wersja
git version 1.7.1
git status
, prawda? Brak brakującej sekcji poniżej?git-rebase
nigdy nie powinni zgłaszać, że istnieją nierozwiązane konflikty, jeśli takich nie ma. Jeśli uda Ci się odtworzyć problem w prostszym przypadku testowym, debugowanie byłoby znacznie łatwiejsze, ale nadal, jeśli niegit status
zgłaszasz żadnych konfliktów, kiedy tak sięgit rebase --continue
dzieje, a Twoja wersja Git jest aktualna, możesz spróbować wysłać e-mail do programisty Git lista mailingowa pod adresem [email protected] zawierająca jak najwięcej informacji diagnostycznych.Odpowiedzi:
Dzieje się tak, ponieważ podczas naprawiania konfliktu usunąłeś cały kod z łatki zastosowany do gałęzi, na której się opiera. Użyj,
git rebase --skip
aby kontynuować.Trochę więcej szczegółów:
Zwykle, naprawiając konflikt podczas ponownego bazowania, edytujesz plik będący w konflikcie, zachowując część lub całość kodu z łatki, która jest obecnie stosowana w gałęzi, na której bazujesz. Po naprawieniu poprawki i zrobieniu
otrzymasz (zwykle zieloną) linię pokazującą zmodyfikowany plik
git rebase --continue będzie działać dobrze w tej sytuacji.
Czasami jednak, rozwiązując konflikt, usuwasz wszystko z nowej łatki, zachowując tylko kod z gałęzi, na której się zmieniłeś. Teraz, kiedy dodasz plik, będzie on dokładnie taki sam, jak ten, na którym próbujesz zmienić bazę. Status git nie pokaże zielonej linii wyświetlającej zmodyfikowane pliki. Teraz, jeśli to zrobisz
git będzie narzekał
To, czego naprawdę chce, żebyś zrobił w tej sytuacji, to użycie
aby pominąć poprawkę. Wcześniej nigdy tego nie robiłem, ponieważ zawsze nie byłem pewien, co właściwie zostałoby pominięte, gdybym to zrobił, nie było dla mnie oczywiste, co tak naprawdę oznacza „pomiń tę łatkę”. Ale jeśli nie uzyskasz zielonej linii z
po edycji pliku w konflikcie, dodaniu go i wykonaniu statusu git, możesz być prawie pewien, że usunąłeś całą poprawkę i możesz zamiast tego użyć
kontynuować.
... ale nie polegaj na tym (i pamiętaj, aby nie dodawać pozostałych plików do folderów repozytorium)
źródło
git add ...
staje się naprawdę irytujące po zmianie stosu plików z długimi ścieżkami. Czygit add --all-the-files-i-changed
mogę biegać wcześniejgit rebase continue
?Wydaje się, że jest to błąd w Git 1.7
Oto dobry artykuł, jak rozwiązać ten problem .
Zasadniczo powinno działać, jeśli wykonasz plik
po rozwiązaniu konfliktów, a potem
powinno działać.
źródło
Otrzymałem to ostrzeżenie, gdy miałem niestabilne pliki. Upewnij się, że nie masz żadnych plików niestacjonarnych. Jeśli nie chcesz, aby pliki niestacjonarne uległy zmianie, odrzuć zmiany za pomocą
źródło
Spróbuj uruchomić to w linii poleceń:
Powinien wywołać interaktywny edytor umożliwiający rozwiązanie konfliktów. Łatwiejsze niż próba zrobienia tego ręcznie, a także git rozpozna, kiedy wykonasz scalanie. Pozwoli również uniknąć sytuacji, w których przypadkowo nie dokonasz pełnego scalenia, co może się zdarzyć, gdy spróbujesz to zrobić ręcznie.
źródło
Po naprawieniu konfliktu upewnij się, że zmienione pliki zostały dodane do plików pomostowych. To rozwiązało problem.
źródło
Przegapiłeś konflikt scalania w AssetsLoader.java. Otwórz go i poszukaj znaczników konfliktu (">>>>", "====", "<<<<<"), a następnie ponownie dodaj git. Wykonaj „git diff --staged”, jeśli masz trudności ze znalezieniem go.
źródło
git diff --staged
ujawnia coś przydatnego? Wskazuje to, jakie zmiany zamierzasz wprowadzić, aby rozwiązać konflikt (y) scalania w tym momencie w rebase. W jednym z plików powinien znajdować się fragment „Ups, nie to zamierzałem zrobić, aby rozwiązać ten problem”.git add
plik nawet ze znacznikami konfliktu. W końcu takie pliki mogą być całkowicie legalne!Właśnie miałem ten problem i chociaż myślę, że może być kilka przyczyn, oto moje ...
Miałem hak przed zatwierdzeniem gita, który odrzucał zatwierdzenia w pewnych warunkach. Jest to dobre w przypadku ręcznego zatwierdzania, ponieważ wyświetli wynik przechwytywania i mogę to naprawić lub zignorować za pomocą commit --no-verify.
Wydaje się, że problem polega na tym, że podczas zmiany bazy, rebase --continue również wywoła hook (w celu zatwierdzenia ostatniej serii zmian). Ale rebase nie wyświetli wyjścia przechwytywania, po prostu zobaczy, że się nie powiodło, a następnie wypluje mniej konkretny błąd mówiący `` Musisz edytować wszystkie konflikty scalania, a następnie oznaczyć je jako rozwiązane za pomocą git add ''
Aby to naprawić, przygotuj wszystkie swoje zmiany i zamiast robić „git rebase --continue”, wypróbuj „git commit”. Jeśli cierpisz na ten sam problem z hakiem, powinieneś zobaczyć powody, dla których nie działa.
Co ciekawe, podczas gdy git rebase nie wyświetla wyjścia z haka git, akceptuje opcję --no-verify, aby ominąć zaczepy.
źródło
git rebase
akceptuje--no-verify
opcję. Jednak pomija tylko przechwyceniepre-rebase
, ale ta opcja nie jest stosowana przy kolejnych wywołaniach dogit commit
.Po naprawieniu zmian możesz zapomnieć o uruchomieniu 'git add -A'
źródło
Właśnie natknąłem się na ten problem. Nie zrobiłbym tego,
git rebase --skip
ponieważgit status
wyraźnie pokazałem przesunięcie modyfikacji, które chciałem zachować. Chociaż miałem kilka dodatkowych plików, które pojawiły się nieoczekiwanie. Rozwiązałem zusunąć niestagowane modyfikacje, a potem się
git rebase --continue
udało.źródło