Zmiana szczegółów po ściągnięciu Git

Po wywołaniu Git pull, jego wynik daje podsumowanie ilości zmian.

Jak mogę zobaczyć wszystkie lub niektóre z plików szczegółowych zmian?

Oto moje pytanie do Jefromi:
  1. Skąd mam wiedzieć, czy ciągnąłem do mistrza? Wszystko co zrobiłem to "git pull".

  2. Na co wskazuje master i jaka jest różnica między master i HEAD, dwoma domyślnymi głowami Git?

  3. Jak zobaczyć szczegółową zmianę w konkretnym akta?

  4. Jak mogę ponownie zobaczyć zmianę w podsumowaniu o ostatnią git pull?

  5. Jaka jest różnica między git diff A git whatchanged?

Author: Peter Mortensen, 2009-09-01

4 answers

Przypuśćmy, że dążysz do mistrza. Możesz odwoływać się do poprzedniej pozycji master przez master@{1} (lub nawet master@{10.minutes.ago}; zobacz sekcję określanie wersji na stronie man git-rev-parse ), dzięki czemu możesz robić takie rzeczy jak

  • Zobacz wszystkie zmiany: git diff master@{1} master

  • Zobacz zmiany w danym pliku: git diff master@{1} master <file>

  • Zobacz wszystkie zmiany w danym katalogu: git diff master@{1} master <dir>

  • Zobacz podsumowanie zmian jeszcze raz: git diff --stat master@{1} master

Jeśli chodzi o twoje pytanie: "Skąd mam wiedzieć, czy jestem na mistrzu"... cóż, używanie gałęzi jest ważną częścią przepływu pracy Git. Zawsze powinieneś być świadomy, na jakiej gałęzi się znajdujesz - jeśli ciągniesz zmiany, chcesz je ciągnąć do właściwej gałęzi! Możesz zobaczyć listę wszystkich gałęzi, z gwiazdką przy aktualnie sprawdzonej, za pomocą polecenia git branch. Bieżąca nazwa gałęzi jest również drukowana wraz z wyjściem git status. Gorąco polecam przeglądanie stron man poleceń do użycia - to świetny sposób na powolne zdobywanie wiedzy.

I twoje ostatnie pytanie: HEAD to nazwa aktualnie sprawdzanej gałęzi. Możesz również użyć HEAD i HEAD@{1} w tym kontekście, ale korzystanie z gałęzi jest nieco bardziej wytrzymałe, ponieważ jeśli pójdziesz i sprawdzisz inną gałąź. HEAD to teraz druga gałąź, a HEAD@{1} to teraz master - nie to, czego chcesz!

Aby zaoszczędzić konieczności zadawania wielu małych pytań, powinieneś prawdopodobnie mieć spójrz na tutorial Gita. W sieci jest milion, na przykład:

 153
Author: Cascabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-31 19:35:01

Say You do a git pull like this:

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From [email protected]:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

Możesz zobaczyć różnicę tego, co się zmieniło, używając numerów wersji:

$ git diff a407564..9f52bed
 38
Author: Christian Oudard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-01 15:12:23

1. Skąd mam wiedzieć, czy ciągnąłem do mistrza? Wszystko co zrobiłem to "git pull".

Samo polecenie działa tak:

git pull [options] [<repository> [<refspec>…]]

I domyślnie odnosi się do bieżącej gałęzi. Możesz sprawdzić swoje gałęzie za pomocą

git branch -a

Wyświetli listę lokalnych i zdalnych gałęzi, takich jak dla NP so (Dodano --- jako dzielnik między lokalnym i zdalnym, aby było to bardziej jasne)

*master
foo
bar
baz
---
origin/HEAD -> origin/master
origin/deploy
origin/foo
origin/master
origin/bar
remote2/foo
remote2/baz

Kiedy spojrzysz na jeden zdalny repo, zobaczysz o czym mówisz:

git remote show origin

Będzie lista jak poniżej:

* remote origin
  Fetch URL: ssh://[email protected]:12345/username/somerepo.git
  Push  URL: ssh://[email protected]:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

Więc dość łatwo jest być pewnym, gdzie wyciągnąć i popchnąć.

3. Jak zobaczyć zmianę szczegółów w konkretnym pliku?

4. Jak ponownie zobaczyć zmianę w podsumowaniu przez ostatni git pull?

Najprostszy i najbardziej elegancki sposób (imo) to:

git diff --stat master@{1}..master --dirstat=cumulative,files

To da ci dwa bloki informacji o zmianach pomiędzy ostatnim pociągnięciem a aktualnym stanem pracy. Przykładowe wyjście (dodałem --- jako dzielnik pomiędzy wyjściem --stat i --dirstat aby było bardziej jasne):

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/
 6
Author: kaiser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-19 01:43:24

Ten sposób jest trochę hakerski, ale pozwoli Ci korzystać z narzędzi graficznych, takich jak gitk lub gitg lub git-gui:

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

Odpowiedź z największą liczbą głosów daje najlepszy sposób używając narzędzia git, ale używam tej metody, ponieważ mogę następnie wykorzystać narzędzia z GUI, aby zobaczyć zmiany: p

Miałem wtedy dodatkowy krok do zrobienia git checkout ., a następnie do zrobienia git pull Ponownie tak, że prawidłowo pociągnąć i połączyć, ale cenię możliwość zbadania różnic w GUI na tyle, aby poradzić sobie z dodatkowymi dwoma kroki.

 2
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-05 22:22:55