Po wykonaniu „prostego” scalenia (jednego bez konfliktów) git show
zwykle pokazuje tylko coś podobnego
commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date: Tue Feb 22 00:27:17 2011 +0100
Merge branch 'testing' into master
Wynika to z tego, że do scalania git show
używa połączonego formatu różnicowego, który pomija pliki, które zgadzają się z jedną z wersji nadrzędnych.
Czy istnieje sposób, aby zmusić git, aby nadal pokazywał wszystkie różnice w połączonym trybie różnicowym?
Wykonanie git show -m
spowoduje pokazanie różnic (przy użyciu różnic par odpowiednio między nową i wszystkimi wersjami nadrzędnymi), ale wolałbym mieć to z różnicami oznaczonymi +/- w odpowiednich kolumnach, jak w trybie łączonym.
Odpowiedzi:
Nie, nie da się tego zrobić
git show
. Ale z pewnością byłoby to czasem miłe i prawdopodobnie byłoby względnie łatwe do zaimplementowania w kodzie źródłowym git (w końcu musisz po prostu powiedzieć mu, aby nie wycinało tego, co uważa za obce wyjście), więc łatka, aby to zrobić prawdopodobnie zostałby zaakceptowany przez opiekunów git.Uważaj jednak na to, czego sobie życzysz; połączenie gałęzi ze zmianą jednowierszową, która została rozwidlona trzy miesiące temu, nadal będzie miało ogromny różnicę w porównaniu z linią główną, a więc taka pełna różnica byłaby prawie całkowicie nieprzydatna. Dlatego git tego nie pokazuje.
źródło
Spójrz na komunikat zatwierdzenia:
zauważ linię:
weź te dwa identyfikatory zatwierdzenia i odwróć je. więc aby uzyskać żądaną różnicę, zrobiłbyś:
aby wyświetlić tylko nazwy zmienionych plików:
i aby je wyodrębnić, możesz dodać to do swojego gitconfig:
następnie użyj go, wykonując:
źródło
git diff fc17405...ee2de56
- pokaże to wszystkie zmiany na ee2de56, które są osiągalne z zatwierdzeń na fc17405, co moim zdaniem jest tym, czego chcesz. Zwróć uwagę na 3 kropki zamiast dwóch.git log
, co nadal pokazuje wszystkie zatwierdzenia, podobnie jak..
wariant...
i...
zrobić to samolog
, ale dladiff
nich są różne !? Jak uzyskać listę zatwierdzeń, które zostały scalone w tym oddziale?Lepsze rozwiązanie (wspomniane przez @KrisNuttycombe):
dla zatwierdzenia scalania:
aby pokazać wszystkie zmiany,
ee2de56
które są dostępne po zatwierdzeniufc17405
. Zwróć uwagę na kolejność skrótów zatwierdzeń - jest taka sama, jak pokazano w informacjach dotyczących scalania:Merge: fc17405 ee2de56
Zwróć także uwagę na 3 kropki
...
zamiast dwóch !Aby wyświetlić listę zmienionych plików, możesz użyć:
źródło
Możesz utworzyć gałąź z HEAD ustawionym na jedno zatwierdzenie przed scaleniem. Następnie możesz wykonać:
Spowoduje to scalenie, ale nie zatwierdzenie. Następnie:
źródło
Wygląda na to, że odpowiedziałem tutaj: https://public-inbox.org/git/[email protected]/
źródło
Myślę, że potrzebujesz po prostu „git show -c $ ref”. Wypróbowanie tego w repozytorium git na a8e4a59 pokazuje połączoną różnicę (znaki plus / minus w jednej z 2 kolumn). Jak wspomina instrukcja git-show, prawie deleguje się do „drzewa git diff”, więc te opcje wyglądają na przydatne.
źródło
git show -c $ref
pokazuje takie same wyniki, jak cytowałem, tj. Żadnych różnic.-c
wybiera połączony tryb różnicowy bardzo podobny do trybu domyślnego dla zatwierdzeń scalania, którym jest „--cc”, patrzgit help show
igit help diff-tree
. Oba całkowicie pomijają pliki, które są zgodne z jedną z nadrzędnych wersji tego pliku.a8e4a59
mam na myśli, że rzeczywiście nie należy do kategorii zatwierdzeń scalania. To zatwierdzenie scalania rzeczywiście zawiera jeden plik, który różni się od obu jego wersji nadrzędnych.Documentation/git-fast-import.txt
ma pewne rzeczy dodane od jednego rodzica, a niektóre od drugiego. Powoduje to, że dane wyjściowe są niepustegit diff-tree --cc
. Wyświetlane są jednak tylko zmiany w tej „sprzecznej” sprawie. Wszystkie „czyste” wyniki scalania, spójrzgit show -m a8e4a59
, nie są wcale wyświetlane.git show -c
. (man git-diff-tree
mówi „Co więcej, zawiera tylko pliki, które zostały zmodyfikowane od wszystkich rodziców”. Ale ja na pewno tego nie zauważyłem.)w twoim przypadku wystarczy
lub po prostu hash dla Ciebie:
źródło
git merge-base HEAD^ HEAD^2
aHEAD^
iHEAD^2
w tym samym stylu, jak to się dzieje w przypadku plików, które zostały połączone z konfliktami.Jeśli zatwierdzenie scalania to zatwierdzenie 0e1329e5, jak wyżej, możesz uzyskać różnicę zawartą w tym scaleniu poprzez:
Mam nadzieję, że to pomoże!
źródło
Jeśli siedzisz przy zatwierdzeniu scalania, to pokazuje różnice:
git diff HEAD~1..HEAD
Jeśli nie jesteś na zatwierdzeniu scalania, po prostu zamień HEAD na zatwierdzenie scalania. Ta metoda wydaje się najprostsza i najbardziej intuicyjna.
źródło
Możesz użyć komendy diff-tree z flagą -c. To polecenie pokazuje, jakie pliki uległy zmianie w zatwierdzeniu scalania.
Dostałem opis flagi -c od Git-Scm :
źródło
Zbudowałem podejście ogólnego przeznaczenia do wykonywania różnych operacji na zatwierdzeniach scalania.
Krok pierwszy : Dodaj alias do git, edytując
~/.gitconfig
:Krok drugi : W
~/.githelpers
zdefiniuj funkcję bash:Krok trzeci : zysk!
Prawdopodobnie jest tu dużo miejsca na ulepszenia, po prostu zebrałem to razem, aby uniknąć irytującej sytuacji. Możesz śmiać się z mojej składni i / lub logiki bash.
źródło