Mam gałąź git (zwaną v4), która została utworzona z mastera dopiero wczoraj. Było kilka zmian do opanowania, które chcę wprowadzić do wersji 4. Tak więc w wersji 4 próbowałem wykonać rebase z mastera i jeden plik ciągle coś schrzanił: jednowierszowy plik tekstowy, który zawiera numer wersji. Ten plik to app/views/common/version.txt
, który przed zmianą bazy zawiera następujący tekst:
v1.4-alpha-02
Oto co robię:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
version.txt
Teraz wygląda tak:
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
Więc porządkuję to i teraz wygląda to tak:
v1.4-alpha-02
a potem próbowałem kontynuować: najpierw próbuję zatwierdzić:
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
Nie ma szczęścia. Więc próbowałem dodać plik:
git add app/views/common/version.txt
Brak odpowiedzi. Chyba brak wiadomości to dobra wiadomość. Więc staram się kontynuować:
> git rebase --continue
Applying: new version, new branch
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
W tym momencie, po tym, jak się z tym obchodzę, uderzam głową o biurko.
Co tu się dzieje? Co ja robię źle? Czy ktoś może mnie wyprostować?
EDIT - dla unutbu
Zmieniłem plik zgodnie z sugestią i otrzymałem ten sam błąd:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
git rebase master
i pozwól jej zawieść ; 2) następnie edytujeszversion.txt
i ustawisz tak, jak powinien wyglądać w tym momencie, i zapisz edycję; 3) to tygit add .../version.txt
; 4) to robiszgit rebase --continue
( nie „zatwierdzaj” )! Jeśli sięrebase --continue
powiedzie, jest już zatwierdzony (nie ma takiej potrzebygit commit
!) - więc pozostaje tylkogit push
(jeśli używasz zdalnego repozytorium). Mam nadzieję, że to pomoże, jeśli dobrze zrozumiałem:)
- na zdrowie!Odpowiedzi:
Napotkałem podobny problem z rebase. Mój problem był spowodowany tym, że jedno z moich zatwierdzeń zmieniło tylko plik, a podczas rozwiązywania odrzuciłem zmianę wprowadzoną w tym zatwierdzeniu. Udało mi się rozwiązać mój problem, pomijając odpowiednie zatwierdzenie (
git rebase --skip
).Możesz odtworzyć ten problem w repozytorium testowym. Najpierw utwórz repozytorium.
Następnie zatwierdź oryginalną zawartość
version.txt
in master.Utwórz
v4
gałąź i zmień zawartośćversion.txt
.Wróć do
master
i zmień zawartośćversion.txt
tak, aby podczas rebase wystąpił konflikt.Przełącz się z powrotem do
v4
gałęzi i spróbuj ponownie bazować. Nie udaje się z konflitowaniemversion.txt
zgodnie z planem.Konflikt rozwiązujemy, wybierając
master
zawartośćversion.txt
. Dodajemy plik i próbujemy kontynuować naszą rebase.To nie wyszło ! Zobaczmy, jakie zmiany
git
według nas są w naszym repozytorium.Ach, ach, nie ma zmiany. Jeśli przeczytałeś szczegółowo poprzedni komunikat o błędzie,
git
poinformował nas o tym i zalecił użyciegit rebase --skip
. Powiedział nam: „Jeśli nie ma już nic do przygotowania, są szanse, że coś innego już wprowadziło te same zmiany; możesz chcieć pominąć ten patch”. Więc po prostu pomijamy zatwierdzenie i rebase powiedzie się.Słowo ostrzeżenia : należy pamiętać, że
git rebase --skip
całkowicie usunie to zatwierdzenie, któregit
próbowało zmienić bazę. W naszym przypadku powinno to być w porządku, ponieważgit
narzeka, że jest to puste zatwierdzenie. Jeśli myślisz, że straciłeś zmiany po zakończeniu rebase, możesz użyć,git reflog
aby uzyskać identyfikator zatwierdzenia swojego repozytorium przed rebase, i użyć,git reset --hard
aby przywrócić swój magazyn z powrotem do tego stanu (jest to kolejna destrukcyjna operacja).źródło
git rebase --skip
, pomijasz tylko jedno zatwierdzenie. Generalniegit status
przed pominięciem zatwierdzenia, wydaje mi się, czy jestem w takiej sytuacji.rebase --skip
:).git reflog purge
lubgit reflog delete
nadal możesz odzyskać zmiany za pomocągit reflog
. Spróbuj sprawdzić różne zmiany, do których się tam odwołujesz, jednym z nich powinien być stan twojego drzewa przed rozpoczęciem całościgit rebase
.Cytując tutaj: http://wholemeal.co.nz/node/9
źródło
Ten komunikat o błędzie jest wynikiem twojego
git commit -a -m "merged"
. Jeśli po prostu naprawić plik, a następnie uruchomićgit add <file>
igit rebase --continue
powinno działać dobrze.git rebase --continue
to próba wykonania zatwierdzenia, ale stwierdzenie, że nie ma żadnych oczekujących zmian do zatwierdzenia (ponieważ już je zatwierdziłeś).źródło
git add <file>
nie rozwiąże problemu.git rebase --continue
nadal donosiNo changes - did you forget to use 'git add'?
Zmień plik app / views / common / version.txt na
W tym momencie w rebase pamiętaj, że rozwiązujesz konflikty scalania, aby pokazać postęp gałęzi innej niż główna .
Tak więc w zmianie bazy z
do
konflikt, który rozwiązujesz, dotyczy tego, jak utworzyć A * w gałęzi tematu.
Więc po wykonaniu
git rebase --abort
polecenia powinny byćźródło
Zachowanie, które widzisz, nie jest tym, czego oczekiwałbym od typowego rebase z tym konfliktem. Rozważ użycie oddzielnej gałęzi, aby wykonać tę rebase (zwłaszcza jeśli zdalnie wypchnąłeś już zatwierdzenia, które przewijasz do przodu). Ponadto,
git mergetool
mogą być pomocne w rozwiązywaniu konfliktów i pamiętając, aby wydaćgit add
.W tym minimalnym przykładzie rebase działa zgodnie z oczekiwaniami. Czy możesz podać przykład pokazujący zachowanie, które widzisz?
źródło
Oto kilka pomysłów:
rm -rf .git/rebase-apply
źródło