Czy istnieje sposób, aby zobaczyć, jakie pliki zmieniły się w oddziale?
Czy istnieje sposób, aby zobaczyć, jakie pliki zmieniły się w oddziale?
Odpowiedzi:
Alternatywa dla odpowiedzi @Marco Ponti i unikanie kasy:
git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
Jeśli twoja konkretna powłoka nie rozumie konstrukcji $ (), użyj zamiast niej tyknięć.
git diff --name-only <some-other-branch>
pokaże Ci, jakie pliki różnią się między Twoim bieżącym oddziałem a <some-other-branch>
. Jest to zasadniczo to samo polecenie, ale należy pamiętać, że można go użyć do znalezienia plików różniących się między dowolnymi dwiema gałęziami, nawet jeśli nie są one zdalnie powiązane. To, czy to porównanie jest przydatne, czy nie, zależy od topologii twoich gałęzi ... Ponadto, pamiętaj, że <some-other-branch>
tak naprawdę może to być w ogóle dowolne zatwierdzenie lub cokolwiek, co rozwiązuje jeden (tagi itp.).
<notMainDev>
i <MY_CURRENT_CO_BRANCH>
ostatnio miały wspólnego przodka, i porównać <notMainDev>
do tego przodka. Będziesz jednak musiał podać swoją obecną nazwę oddziału, zgodnie z git merge-base
oczekiwaniami dwóch argumentów - nie ma skrótu, przynajmniej w obecnej wersji.
git branch | grep '\*' | awk '{print $2}'
który pobierze zatwierdzenie dla gałęzi między <notMainDev> i moją bieżącą gałęzią. Mogę wtedy zrobić git diff - only -name <notMainDev> $ (git merge-base <notMainDev> git branch | grep '\*' | awk '{print $2}'
)
Wszystko, co musisz zrobić, to:
git checkout <notMainDev>
git diff --name-only <mainDev>
Spowoduje to wyświetlenie tylko nazw plików różniących się między dwiema gałęziami.
<mainDev>
od czasu rozejścia się gałęzi. Możesz użyć git diff --name-only <sha-of-branch-point>
zamiast tego lub zobaczyć alternatywną odpowiedź, którą opublikowałem, która pozwala uniknąć kasy.
notMainDev
będą uaktualniane z zatwierdzeń mainDev ... Ja zwykle znaleźć przydatne, aby zobaczyć te różnice jak dobrze chociaż.
<sha-of-branch-point>
zgit rev-parse <branch-name>
zdziwiony, jak dotąd nie zostało to powiedziane!
git diff master...branch
Zobacz zmiany tylko na branch
Aby sprawdzić bieżące użycie oddziału
git diff master...
Dzięki jqr
To krótka ręka dla
git diff $(git merge-base master branch) branch
więc baza scalania (najnowszy wspólny zatwierdzenie między gałęziami) i końcówka gałęzi
Również użycie origin / master zamiast tylko master pomoże na wypadek, gdyby twój lokalny master był datowany
git diff --name-only master..
jeśli chcesz tylko nazwy plików, które różnią się między dwiema gałęziami.
Nie mogę uwierzyć, że jest tak wiele sposobów, aby to zrobić. Używam Whatchanged jak ktoś wcześniej opublikowany, tylko z następującymi argumentami:
git whatchanged --name-only --pretty="" origin..HEAD
To tylko wyświetla nazwy plików i tylko te, które zmieniły się w bieżącej gałęzi.
Bardzo podobała mi się odpowiedź @ twalberg, ale nie chciałem cały czas wpisywać bieżącej nazwy oddziału. Więc używam tego:
git diff --name-only $(git merge-base master HEAD)
git diff master... --name-only
gdy działałem na gałęzi docelowej i otrzymałem ten sam wynik. Czy możesz być tak uprzejmy, aby przekazywać informacje zwrotne między tym, co dobre a złe, między odpowiedzią a poleceniem, które podałem?
git diff master.. --name-only
(zauważ, że są tylko 2 kropki zamiast 3). Aby zrozumieć, co oznaczają kropki, zapoznaj się z tą odpowiedzią
git diff --name-only master...branch-name
z którą chcemy porównać.
Co jeśli to może być tak proste?
git changed
Jeśli chcesz założyć, że główna gałąź nazywa się „master” i że tworzysz inne gałęzie z poziomu master, możesz dodać ten alias do swojego ~/.gitconfig
pliku, aby było to takie proste:
cbranch = !"git branch | grep '*' | cut -f2 -d' '"
changed = !"git diff --name-only $(git cbranch) $(git merge-base $(git cbranch) master)"
Te założenia sprawdzą się u większości ludzi w większości sytuacji, ale musisz zdawać sobie sprawę, że je realizujesz.
Musisz także użyć powłoki, która obsługuje $()
. Jest bardzo prawdopodobne, że twoja powłoka obsługuje to .
git show --stat origin/branch_name
Spowoduje to wyświetlenie listy plików, które zostały dodane lub zmodyfikowane w ramach tej gałęzi.
Z jakiegoś powodu nikt nie wspomniał git-tree
. Zobacz https://stackoverflow.com/a/424142/1657819
git-tree
jest preferowany, ponieważ jest to polecenie hydrauliczne ; ma być programowy (i przypuszczalnie szybszy)
(zakładając, że podstawowa gałąź to master
)
git diff-tree --no-commit-id --name-only -r master..branch-name
Jednak pokaże to wszystkie pliki, które zostały naruszone w oddziale, jeśli chcesz zobaczyć tylko pliki wyraźnie zmodyfikowane , możesz użyć --diff-filter
:
git diff-tree --no-commit-id --name-only -r master..branch-name --diff-filter=M
Można również użyć --name-status
zamiast, --name-only
aby zobaczyć status plików ( A
/ M
/ D
i tak dalej)
rubocop --fail-level error $(git diff-tree --no-commit-id --name-only -r origin/master..HEAD --diff-filter=M)
Przyjęta odpowiedź - git diff --name-only <notMainDev> $(git merge-base <notMainDev> <mainDev>)
- jest bardzo bliska, ale zauważyłem, że ma nieprawidłowy status przy usuwaniu. Dodałem plik do gałęzi, a jednak to polecenie (za pomocą --name-status
) nadało plikowi, że usunąłem status „A”, a plik dodał status „D”.
Zamiast tego musiałem użyć tego polecenia:
git diff --name-only $(git merge-base <notMainDev> <mainDev>)
Poniższy plik wsadowy jest oparty na odpowiedzi Twalberga, ale będzie działał w systemie Windows:
@ECHO OFF
C: :: <== OR USE A DIFFERENT DRIVE
CD \path\to\where\git\files\are :: <== CHANGE TO THE ACTUAL PATH
SET /p b="Enter full path of an ALREADY MERGED branch to compare with origin/master: "
bash --login -i -c "git diff --name-only %b% $(git merge-base %b1% origin/drop2/master)"
PAUSE
Powyższe zakłada, że główną gałęzią jest origin / master i że git bash został dołączony, gdy Git został zainstalowany (a jego lokalizacja znajduje się w środowisku ścieżki). Rzeczywiście potrzebowałem pokazać rzeczywiste różnice za pomocą skonfigurowanego narzędzia różnicowego (kdiff3), więc podstawiłem następujące polecenie bash powyżej:
bash --login -i -c "git difftool --dir-diff %b% $(git merge-base %b1% origin/drop2/master)"