Mam stary oddział, który chciałbym usunąć. Jednak zanim to zrobię, chcę sprawdzić, czy wszystkie zatwierdzenia dokonane w tej gałęzi zostały w pewnym momencie scalone z inną gałęzią. Dlatego chciałbym zobaczyć wszystkie zatwierdzenia dokonane w mojej bieżącej gałęzi, które nie zostały zastosowane w żadnej innej gałęzi [lub, jeśli nie jest to możliwe bez skryptu, w jaki sposób można zobaczyć wszystkie zatwierdzenia w jednej gałęzi, które nie zostały zastosowane do innego podanego oddziału?].
git
branch
git-branch
sircolinton
źródło
źródło
Odpowiedzi:
Prawdopodobnie po prostu chcesz
Spowoduje to wyświetlenie wszystkich gałęzi, które zawierają zatwierdzenia z „gałęzi do usunięcia”. Jeśli zgłasza więcej niż tylko „odgałęzienie do usunięcia”, oddział został scalony.
Twoje alternatywy to tak naprawdę tylko lista poprawek składni. np.
git log one-branch..another-branch
pokazuje wszystko, coone-branch
musi mieć wszystkoanother-branch
.Możesz być także zainteresowany,
git show-branch
aby zobaczyć, co jest gdzie.źródło
git branch --contains some-branch
tylko zwracasome-branch
, to coś zwraca, ale nie został scalony.git log foo..bar
pokażą commits między najnowszym paskiem a najnowszym foo, ale nie brakuje innych commits z dalszej przeszłości. Aby zobaczyć wszystko w barach, ale nie w foo, powinieneś użyć rozwiązania @ jimmyorr.Aby zobaczyć listę zatwierdzeń dla jednej gałęzi, ale nie innej, użyj git log:
... to znaczy, pokaż dzienniki zatwierdzeń dla wszystkich zatwierdzeń na oldbranch, które nie są na newbranch. Możesz wymienić wiele oddziałów do włączenia i wyłączenia, np
Uwaga: w systemie Windows
^
jest klawiszem Escape, więc należy go zmienić przy pomocy innego^
:źródło
^
jako prefiksu mnie zdezorientowało. W tym kontekście oznacza to wykluczenie tej gałęzi. Użycie^
sufiksu byłoby względnym odniesieniem do nadrzędnego zatwierdzenia tej gałęzi.gitk oldbranch ^newbranch --no-merges
(Testowane z git 1.8.1.1). Uwaga dodatkowa: dla mnie^
oznacza włączenie zatwierdzenia HEAD oddziałunewbranch
.Aby wyświetlić zatwierdzenia w oldbranch, ale nie w newbranch:
Aby pokazać różnicę według tych zatwierdzeń (zauważ, że są trzy kropki):
Oto dokument z ilustracją diagramu https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection#Commit-Ranges
źródło
newbranch
czyoldbranch
możemy zrobićgit log ..oldbranch
lubgit log newbranch..
odpowiednio..
. Użyłem również--cherry-pick
opcji, aby ukryć zatwierdzenia, które są obecne w obu gałęziach, ale mają inny skrót, ponieważ zostały wybrane z jednej gałęzi do drugiej.Dla tych, którzy wciąż szukają prostej odpowiedzi, sprawdź git cherry . Porównuje rzeczywiste różnice zamiast zatwierdzania skrótów. Oznacza to, że obsługuje zmiany, które zostały wybrane lub zmienione.
Najpierw sprawdź gałąź, którą chcesz usunąć:
git checkout [branch-to-delete]
następnie użyj git cherry, aby porównać go z główną gałęzią programistyczną:
git cherry -v master
Przykładowe dane wyjściowe:
Uwaga:
-v
Flaga ma zawierać komunikat zatwierdzenia wraz z skrótem SHA.Linie z przodu „+” znajdują się w gałęzi do usunięcia, ale nie w gałęzi głównej. Ci z „-” z przodu mają równoważne zatwierdzenie w master.
Dla JUST zatwierdzeń, które nie są w master, połącz cherry pick z grep:
git cherry -v master | grep "^\+"
Przykładowe dane wyjściowe:
źródło
diff
narzędzia uniksowego do porównania różnych plików. Lub możesz utworzyć tymczasową gałąź i zmiażdżyć wszystkie zmiany w tym, co zrobiłeś z oryginalną gałęzią, a następnie użyć tego, co moim zdaniem będzie działać.Chociaż niektóre z zamieszczonych tutaj odpowiedzi pomogą ci znaleźć to, czego szukasz, poniższe polecenie podrzędne oddziału git jest bardziej odpowiednim rozwiązaniem dla twojego zadania.
- scalony służy do znalezienia wszystkich gałęzi, które można bezpiecznie usunąć, ponieważ gałęzie te są w pełni zawarte przez HEAD.
Podczas gdy w
master
jednym można uruchomić polecenie wyliczenia gałęzi, można je bezpiecznie usunąć, na przykład:źródło
Odpowiedź Jimmyorra nie działa w systemie Windows. pomaga użyć
--not
zamiast tego^
tak:źródło
^
jest obsługiwane w systemie Windows, ale musi być uciekł, która w systemie Windows, to (kolejny)^
:git log oldbranch ^^newbranch --no-merges
.Jeśli jest to jedna (pojedyncza) gałąź, którą należy sprawdzić, na przykład jeśli chcesz, aby gałąź „B” została całkowicie scalona z gałęzią „A”, możesz po prostu wykonać następujące czynności:
git branch -d <branchname>
ma pewność, że „Oddział musi zostać w pełni połączony w HEAD”.Uwaga : powoduje to usunięcie gałęzi B, jeśli zostanie scalona z A.
źródło
Możesz użyć tego prostego skryptu, aby zobaczyć zatwierdzenia, które nie zostały scalone
Możesz także użyć narzędzia git-wtf , które wyświetli stan gałęzi
źródło
Wystarczy użyć,
git cherry
aby wybrać wszystkie zatwierdzenia w oddziale,newFeature42
na przykład:git cherry -v master newFeature42
źródło
Zacznij tworzyć żądanie ściągnięcia za pośrednictwem usługi hostingowej git, której używasz. Jeśli gałąź została całkowicie scalona z gałęzią podstawową, nie będzie można utworzyć nowego PR.
Nie musisz właściwie wysyłać żądania ściągnięcia, po prostu użyj pierwszego kroku, w którym wybierasz gałęzie.
Na przykład na GitHub:
To nie używa git w wierszu poleceń, ale często uważam, że pomocne jest używanie innych narzędzi, które masz do dyspozycji, z wyraźnym modelem mentalnym, zamiast próby zapamiętania innego tajemnego polecenia git.
źródło