Git merge left HEAD marks in my files
Próbowałem scalić plik w wierszu poleceń używając Git, gdy pojawił się komunikat o błędzie informujący mnie o przerwaniu scalania.
Myślałem, że to koniec, ale potem zdałem sobie sprawę, że w moich plikach są gitmarki. Tak:
start =
expression
validchar =
[0-9a-zA-Z_?!+\-=@#$%^&*/.]
integer =
<<<<<<< HEAD
digits:[0-9]+
{ return digits.join(""); }
=======
sign:"-"* digits:[0-9]+
{ return sign + digits.join(""); }
>>>>>>> gh-pages
Pliki zostały edytowane nie przeze mnie i wyświetlają linie wstawione z:
- HEAD after less than signs (
<<<<<<< HEAD
) - linie kodu
- ciąg znaków równości (
=======
) - nowa wersja kod
- kolejna linia zaczynająca się od znaku większego niż i nazwy gałęzi (
>>>>>>> gh-pages
)
Co gorsza, zawartość pliku nie jest już w porządku. Czy ktoś wie jak przywrócić te pliki do normy, a zmiany które wprowadziłem w gh-branch połączyłem w master branch?
4 answers
To są znaczniki konfliktu . Wciąż jesteś w trakcie scalania, ale były pewne części, których Git nie mógł połączyć automatycznie. Będziesz musiał ręcznie edytować te części tak, jak chcesz, aby były, a następnie zatwierdzić wyniki.
Na przykład, w twoim konkretnym przypadku, prawdopodobnie chciałbyś rozwiązać to w ten sposób (UWAGA-strzałki/tekst po prawej stronie to tylko moje notatki, a nie coś, co wpisujesz do pliku):
integer =
<<<<<<< HEAD <-+ remove the bits here
digits:[0-9]+ |
{ return digits.join(""); } |
======= <-+
sign:"-"* digits:[0-9]+
{ return sign + digits.join(""); }
>>>>>>> gh-pages <-- and this
I w ten sposób zapisałbyś plik as...
integer =
sign:"-"* digits:[0-9]+
{ return sign + digits.join(""); }
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-05-23 12:34:19
Absolutnie zacznij od 'Git status', aby zobaczyć, co masz. Jeśli przerwałeś połączenie (lub przerwano połączenie) i masz skonfliktowane pliki w katalogu roboczym, coś poszło nie tak. Status Git powie Ci, gdzie jesteś. Po tym, masz wiele opcji. Należy rozwiązać commit scalający ręcznie, co może być trudne lub przy użyciu narzędzia:
git mergetool
Narzędzie scalania będzie działać, jeśli Twoje pliki są wymienione jako wymagające scalenia.
Możesz wykonaj również jeden z:git checkout --ours -- /path/to/conflicted-file # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file
Możesz zobaczyć różne wersje używając składni: 1: filename. Zobacz tutaj dla wyjaśnienia. Wszystkie powyższe założenia zakładają jednak, że 'Git status' pokazuje pliki jako wymagające połączenia.
Wreszcie, zawsze masz możliwość:
git reset --hard # sounds like --hard is what you need but check other options
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-05-23 12:02:22
Wszystkie odpowiedzi są poprawne, ale jeśli chcesz Autoremove wszystkie znaki konfliktu i chcesz automatycznie zmienić pliki, aby zachować głowę, możesz utworzyć własny skrypt bash jak: -
Przykładowy Skrypt:
# vim /usr/sbin/solve.git
(Dołącz Po)
#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify
# chmod 755 /usr/sbin/solve.git
& uruchom go w swoim Git repo / path do rozwiązania:
$ cd <path_to_repo>
$ solve.git
Uwaga: - wyżej wymienione rozszerzenia plików to php, css, js, html , svg i txt.
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-03-02 06:26:35
W atomie miałem problem, że niektóre pliki nie zapisują rozwiązanych konfliktów scalenia na dysku, więc musiałem ręcznie kliknąć "Zapisz". Zajęło mi trochę czasu, żeby to rozgryźć.
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-04-05 21:57:29