Изменение деталей после Git pull


130

После запроса Git его вывод дает сводку о сумме изменения.

Как я могу увидеть подробные изменения каждого или некоторых файлов?

Хорошо, вот мой вопрос Джефроми:

  1. Как мне узнать, тянет ли я к мастеру? Все, что я сделал, это "git pull".

  2. На что указывает master и в чем разница между master и HEAD, двумя заголовками Git по умолчанию?

  3. Как я могу увидеть подробные изменения в конкретном файле?

  4. Как увидеть изменение итогового вывода по последнему git pull снова ?

  5. Какая разница между git diffи git whatchanged?


4
Хорошо, это повторяющееся добавление новых вопросов посредством редактирования - это не совсем то, как система предназначена для использования. Вы также можете очень легко ответить на многие свои вопросы, просмотрев страницы руководства или просто попробовав что-нибудь. Например, git diffявно выводится разница, тогда как git whatchangedявно выводится список информации о фиксации, каждая из которых содержит список измененных файлов.
Каскабель

Наверное, из-за твоей низкой репутации.
TED

@TED ​​Для того, чтобы оставить комментарий, нужно всего 50 человек, а чтобы проголосовать за него - 15.
Каскабель

На моем ноутбуке с Ubuntu иногда работает, иногда нет. Я временно нашел другой компьютер с Centos и делаю этот комментарий. На обоих компьютерах я использую Firefox.
Тим,

Очень странно. Возможно, вы захотите зайти в мета и посмотреть, известная ли это проблема / сообщить о ней.
Cascabel

Ответы:


204

Предположим, вы тянете к мастеру. Вы можете обратиться к предыдущей позиции masterby master@{1}(или даже master@{10.minutes.ago}; см. Раздел, посвященный указанию ревизий на странице руководства git-rev-parse ), чтобы вы могли делать такие вещи, как

  • Смотрите все изменения: git diff master@{1} master

  • Смотрите изменения в данном файле: git diff master@{1} master <file>

  • Просмотрите все изменения в данном каталоге: git diff master@{1} master <dir>

  • Снова просмотрите сводку изменений: git diff --stat master@{1} master

Что касается вашего вопроса «как мне узнать, что я нахожусь на мастере» ... ну, использование веток является важной частью рабочего процесса Git. Вы всегда должны знать, в какой ветке вы находитесь - если вы вытащили изменения, вы захотите перетащить их в нужную ветку! Вы можете увидеть список всех веток, отмеченных звездочкой рядом с выбранной в данный момент ветвью, с помощью команды git branch. Текущее имя ветки также печатается вместе с выводом git status. Я настоятельно рекомендую бегло просмотреть справочные страницы команд, которые нужно использовать - это отличный способ медленно получить некоторые знания.

И ваш последний вопрос: HEADэто имя текущей проверенной ветки. Вы действительно можете использовать HEADи HEAD@{1}в этом контексте, но несколько более надежно использовать ветки, поскольку если вы пойдете и проверите другую ветку. HEADтеперь это вторая ветка, а HEAD@{1}сейчас master- не то, что вы хотите!

Чтобы избавиться от множества подобных вопросов, вам, вероятно, стоит взглянуть на учебник по Git. В сети миллион, например:

  • Книга Pro Git
  • Git Magic
  • и 4,5 миллиона просмотров в Google по запросу "Git tutorial"

5
это лучше, чем мое решение :)
Christian Oudard 01

2
Я знаю, что это устарело, но ... Должно быть наоборот: git diff master@{1} masterиначе изменение будет отображаться «наоборот», то есть вставки становятся удалениями и т. Д.
ultracrepidarian

2
git diff master@{1} masterне работала для меня, а git diff master~1 masterвыполняла работу за меня.
unrealsoul007

5
@ unrealsoul007 Тогда ваша ситуация была другой. master ~ 1 - это родительский коммит того мастера, на который в данный момент указывает; вы увидите разницу только для этого коммита. master @ {1} - это предыдущий мастер фиксации, на который указывал; если, например, вы только что потянули, это будет позиция мастера перед натяжением, как описано здесь. Если этого не произошло, то вы, вероятно, сделали что-то еще, что нужно было освоить с тех пор, как потянули. Попробуй git reflog masterпонять что.
Cascabel

@Jefromi fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.Я все время получаю эту ошибку. Хотя git reflog firstDesign имеет этот вывод .
unrealsoul007

52

Скажем, вы выполняете git pull следующим образом:

$ 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 git@dev.example.com:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

Вы можете увидеть разницу в том, что изменилось, используя номера ревизий:

$ git diff a407564..9f52bed

5
И вы можете получить резюме, используя " git diff --stat a407564..9f52bed" или просто резюме " git diff --summary a407564..9f52bed"
Якуб Наребски, 01

14
Для более новых версий git git pull больше не выводит список файлов, которые были изменены. Чтобы получить это, вам нужно выполнить `git pull --stat '
user10

6

1. Как узнать, тянет ли я к мастеру? Все, что я сделал, это "git pull".

Сама команда работает так:

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

и по умолчанию относится к текущей ветке. Вы можете проверить свои ветки, используя

git branch -a

Здесь будут перечислены ваши локальные и удаленные ветки, например, так (добавлен --- разделитель между локальным и удаленным, чтобы сделать его более понятным)

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

Когда вы затем посмотрите на одно удаленное репо, вы увидите, о чем говорите:

git remote show origin

будет перечисляться следующим образом:

* remote origin
  Fetch URL: ssh://git@git.example.com:12345/username/somerepo.git
  Push  URL: ssh://git@git.example.com: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)

Таким образом, довольно легко быть уверенным, откуда тянуть и куда толкать.

3. как увидеть изменение деталей в конкретном файле?

4. как снова увидеть изменение итогового вывода по последнему git pull?

Самый простой и элегантный способ (imo):

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

Это даст вам два блока информации об изменениях между вашим последним запуском и текущим состоянием работы. Пример вывода (я добавил --- разделитель между --statи --dirstatвыводом, чтобы было понятнее):

 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/

2

Это своего рода хакерский прием, но он позволит вам использовать такие графические инструменты, как gitkили gitgили git-gui:

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

Ответ с наибольшим количеством голосов дает лучший способ использовать инструмент git, но я использую этот метод, потому что затем могу использовать инструменты с графическим интерфейсом, чтобы увидеть изменения: P

Затем у меня был бы дополнительный шаг: сделать, git checkout .а затем сделать еще git pullраз, чтобы я правильно извлек и слил, но я ценю возможность исследовать различия в графическом интерфейсе достаточно, чтобы справиться с дополнительными двумя шагами.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.