W przypadku zmian ukrytych w zatwierdzeniach scalania
Polecenia scalania automatycznie ukrywają swoje zmiany w danych wyjściowych dziennika Git. Zarówno kilof, jak i odwrotna wina nie znalazły zmiany. Więc wiersz, który chciałem został dodany, a później usunięty, i chciałem znaleźć scalenie, które go usunęło. git log -p -- path/fileHistoria plików pokazuje tylko, że jest dodawana. Oto najlepszy sposób na znalezienie tego:
git log -p -U9999 -- path/file
Wyszukaj zmianę, a następnie wyszukaj wstecz „^ commit” - pierwsze „^ commit” to zatwierdzenie, w którym plik miał ostatnią linię. Drugie „zatwierdzenie” następuje po jego zniknięciu. Drugim zatwierdzeniem może być ten, który go usunął. The-U9999 on wyświetlać całą zawartość pliku (po każdej zmianie pliku), przy założeniu, że wszystkie pliki mają maksymalnie 9999 wierszy.
Znajduje wszelkie powiązane scalenia za pomocą brutalnej siły (różni każde możliwe scalenie zatwierdzenia z pierwszym rodzicem, działa przeciwko tonom commits)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(Próbowałem bardziej ograniczyć filtr wersji, ale natknąłem się na problemy i nie polecam tego. Poszukiwane zmiany dodawania / usuwania dotyczyły różnych gałęzi, które zostały scalone w różnym czasie i A ... B nie obejmował kiedy zmiany faktycznie zostały scalone z linią główną).
Pokaż drzewo Git z tymi dwoma zatwierdzeniami (i usunięto wiele złożonych historii Git):
git log --graph --oneline A B ^$(git merge-base A B)
(A jest pierwszym zatwierdzeniem powyżej, B jest drugim zatwierdzeniem powyżej)
Pokaż historię A i historię B minus historię zarówno A, jak i B.
Alternatywna wersja (wydaje się, że pokazuje ścieżkę bardziej liniowo niż zwykłe drzewo historii Git - jednak wolę zwykłe drzewo historii Git):
git log --graph --oneline A...B
Trzy, a nie dwie kropki - trzy kropki oznaczają „r1 r2 - nie $ (git merge-base - all r1 r2). Jest to zestaw zatwierdzeń, które są osiągalne z jednego z r1 (lewa strona) lub r2 (prawa strona) z boku), ale nie z obu ”. - źródło: „man gitrevisions”
git log -S<string> /path/to/filechce-club-ccjak dobrze, aby pokazać ich usunięcie podczas scalenia (konflikty)