Pytanie Pokazuje, które pliki zmieniły się między dwiema wersjami


Chcę połączyć dwie gałęzie, które zostały rozdzielone na chwilę i chciałem wiedzieć, które pliki zostały zmodyfikowane.

Przejdź przez ten link: http://linux.yyz.us/git-howto.html co było całkiem przydatne.

Narzędzia do porównywania oddziałów, na które natknąłem się, to:

  • git diff master..branch
  • git log master..branch
  • git shortlog master..branch

Zastanawiałeś się, czy istnieje coś takiego jak "git status master..branch", aby zobaczyć tylko te pliki, które różnią się między tymi dwoma gałęziami.

Bez tworzenia nowego narzędzia, myślę, że jest to najbliższy moment, w którym można to zrobić teraz (co oczywiście będzie się powtarzać, jeśli plik został zmodyfikowany więcej niż jeden raz):

  • git diff master..branch | grep "^diff"

Zastanawiałam się, czy jest coś, co przegapiłem ...


1789
2018-05-05 00:47


pochodzenie


Ilu innych uważa ten tytuł za wprowadzający w błąd? W rzeczywistości chodzi o znalezienie różnic między dwoma gałęziami. Szukałem tego, czego szukałem, aby zobaczyć różnice między dwiema wersjami tego samego oddziału. Czy tylko ja jestem jedyny? - Sandeepan Nath
@SandeepanNath: z gitem nie ma różnicy. ZAWSZE odnosisz się do poszczególnych zatwierdzeń. - Samuel O'Malley
@ SamuelO'Malley Jestem nowy w git i biorąc pod uwagę pozornie wspólną strategię rozgałęziania, w której wszystkie gałęzie są ostatecznie scalone z gałęzią główną i ostatecznie master jest rozwijany. Teraz, biorąc pod uwagę wydarzenie, w którym produkcja jest już u mistrza, ale za końcówką (przez jedną rewizję, jeśli ostatnie wdrożenie miało miejsce po ostatnim scaleniu), chciałbym zobaczyć różnice między tymi dwiema wersjami, do dowiedzieć się, co zostanie wdrożone. Nie chciałbym patrzeć na oddział, który był ostatnio połączony. Popraw mnie, jeśli się mylę. - Sandeepan Nath
@SandeepanNath: zamiast używać nazw gałęzi, możesz wziąć poniższe odpowiedzi i podać tylko identyfikatory zatwierdzeń. Możesz nawet odnieść zatwierdzenia według ich nazw tagów, jeśli utworzysz tagi po rozwinięciu. - Samuel O'Malley
@SandeepanNath Nie można porównać 2 oddziałów, należy określić wersję. Porównywanie 2 oddziałów polega na porównaniu 2 wersji. - Bastien Vandamme


Odpowiedzi:


Aby porównać bieżący oddział z master

$ git diff --name-status master

Aby porównać każdą parę gałęzi

$ git diff --name-status firstbranch..yourBranchName

To powinno zrobić to, czego potrzebujesz, jeśli dobrze cię rozumiem.


2187
2018-05-05 01:04



+1, czasem tylko -name jest przydatne - Pat Notz
@ user446936 - możesz zobaczyć, co oznaczają litery na stronie man statusu @ kernel.org/pub/software/scm/git/docs/git-status.html - w szczególności M == zmodyfikowany, D == skreślony - James Manning
git diff master..blabla -- daje mi fatal: bad revision 'master..blabla'. git diff master blabla -- daje mi fatal: bad revision 'master'. Masz pojęcie, co jest nie tak? UPDATE: to repo nie ma gałęzi o nazwie master, doh! - akostadinov
git diff --name-status your_branch...master wyprowadza zmiany, które nastąpiły na wzorcu, ponieważ utworzono z niego twoją gałąź - Radu
Oto link do większej liczby opcji przy użyciu git diff. git-scm.com/docs/git-diff - akvallejos


Próbować

$ git diff --stat --color master..branchName

Dzięki temu uzyskasz więcej informacji o każdej zmianie, a jednocześnie będziesz używać tej samej liczby linii.

Możesz również odwrócić gałęzie, aby uzyskać jeszcze wyraźniejszy obraz różnicy, jeśli chcesz scalić w inny sposób:

$ git diff --stat --color branchName..master

354
2018-02-09 19:38



Jeśli masz (bardzo zalecane, imho) kolor git włączony (config --global color.ui true), możesz pominąć --color. (Mam lks - leniwy zespół klawiatury.) - Art Swri
Jestem z tobą w kolorze! Przy okazji, chciałem powiedzieć git config --global color.ui true - być kompletnym. - Art Swri
Nie działa, zgłasza błędy: fatal: ambiguous argument 'master..branchName': unknown revision or path not in the working tree. - Tomáš Zato
@ TomášZato przepraszam, ale musisz zamienić "branchName" na nazwę swojego oddziału. - Gerry


Należy również pamiętać, że git ma tanie i łatwe rozgałęzienia. Jeśli myślę, że scalenie może być problematyczne, tworzę gałąź do scalenia. Więc jeśli master ma zmiany, które chcę scalić i ba to moja gałąź, która potrzebuje kodu z master, może wykonać następujące czynności:

git checkout ba
git checkout -b ba-merge
git merge master
.... review new code and fix conflicts....
git commit
git checkout ba
git merge ba-merge
git branch -d ba-merge
git merge master

Końcowym rezultatem jest to, że muszę wypróbować scalenie na wyrzucanej gałęzi przed wkręceniem mojej gałęzi. Jeśli się pogubię, mogę po prostu usunąć ba-merge Oddział i zacznij od nowa.


145
2017-10-11 01:22



Niesamowite. Nigdy nie myślałem o rozgałęzieniu w ten sposób. Myślę, że powinno to być uważane za część "najlepszych praktyk" podczas łączenia. - egelev
Kiedy połączysz ba-marge z powrotem w ba, czy nie ma możliwości ponownego naprawienia konfliktów? - Josef.B
Nie, już je rozwiązałeś. - Eric Anderson
@EricAnderson Dobra, to wykres. SVN przykleja się jak guma pod szkolnym biurkiem. dzięki. - Josef.B


Jeśli ktokolwiek próbuje wygenerować plik diff z dwóch gałęzi:

git diff master..otherbranch > myDiffFile.diff

45
2018-04-03 14:01



Przydaje się to szczególnie w przypadku dużych oddziałów zawierających wiele różnic. - vandsh


Zauważ, że git ułatwia po prostu wypróbowanie scalenia i wycofanie się z jakichkolwiek problemów, jeśli nie podoba ci się wynik. Może być łatwiej niż wcześniej szukać potencjalnych problemów.


30
2018-05-05 00:59



David, to dobra uwaga, chociaż dobrze byłoby po prostu wiedzieć, co się dzieje przed rozdaniem ... - johannix


Istnieje również metoda oparta na GUI.

Możesz użyć gitk.

  1. Biegać:

    $ gitk --all
    
  2. Kliknij prawym przyciskiem myszy zatwierdzenie oddziału i wybierz Zaznacz to zatwierdzenie w wyskakującym menu.

  3. Kliknij prawym przyciskiem myszy zatwierdzenie innego oddziału i wybierz Diff to -> oznaczone zatwierdzenie lub Diff oznaczony commit -> this.

Następnie pojawi się zmieniona lista plików w prawym dolnym panelu i szczegóły różnic w lewym dolnym panelu.


29
2018-06-14 06:01



@Orwellophile I upload a wideo aby pokazać, jak to zrobić. Mam nadzieję, że ci to pomoże. - Shawn Xie
Wow, tylko dla mnie, czuję się wyjątkowo. Zrobiłem zakładkę w serwisie delicious.com, by móc korzystać z niego w przyszłości i korzystać z dodatkowego google-foo. - Orwellophile


Jeszcze jedna opcja, używając meldunku w tym przypadku:

git difftool -d master otherbranch

Pozwala to nie tylko zobaczyć różnice między plikami, ale także zapewnia łatwy sposób wskazywania i klikania w konkretny plik.


26
2018-04-24 13:23



Może chcieć ustawić meldunek jako domyślny difftool: git config --global diff.tool meld - bwv549
To jest moje ulubione, ponieważ użyje dowolnego skonfigurowanego przez ciebie difftoola. - Josiah
Nieobsługiwane w systemie OSX. :-( - Mike S.
@MikeS. proszę, sprawdź tę odpowiedź stackoverflow.com/a/12815806/151918 zawiera instrukcje dla OSX. Działa przynajmniej dla mnie, mam nadzieję, że to pomaga. - rsilva4


Gdy pracujesz wspólnie lub na wielu obiektach naraz, jest tak, że upstream lub nawet twój master zawiera pracę, która nie jest zawarta w twoim oddziale i będzie niepoprawnie pojawiać się w podstawowych różnicach.

Jeśli Twój Upstream mógł się przenieść, powinieneś to zrobić:

git fetch
git diff origin/master...

Samo użycie git diff master może zawierać lub nie uwzględniać odpowiednich zmian.


14
2018-03-24 03:21





A jeśli szukasz zmian tylko dla niektórych plików, to:

git diff branch1 branch2 -- myfile1.js myfile2.js

branch1 jest opcjonalne, a twoja obecna gałąź (gałąź, w której się znajdujesz) będzie domyślnie brana pod uwagę, jeśli nie podano branch1. na przykład:

git diff master -- controller/index.js

10
2018-05-16 13:13





Jeśli używasz IntelliJ IDEAmożesz także porównać dowolny oddział z bieżącym oddziałem roboczym. Widzieć http://www.jetbrains.com/idea/webhelp/merging-deleting-and-porównanie-branches.html#d288093e3827 po więcej informacji. Jest to dostępne w Darmowa edycja także.


9
2018-06-06 07:17





Można powiedzieć dwie gałęzie

  • A (Oddział, w którym pracujesz)
  • B (inna gałąź, z którą chcesz porównać)

Będąc w oddziale A możesz pisać

git diff --color B

to da ci wynik

enter image description here

Ważne jest to

  1. Tekst w kolorze zielonym znajduje się wewnątrz oddziału A

  2. Tekst w kolorze czerwonym jest obecny w Oddziale B.


4
2017-10-04 11:56