Детальна зміна після витягування Git


130

Після витягування Git, його результат дає короткий підсумок щодо суми зміни.

Як я можу побачити докладні зміни кожного або деяких файлів?

Гаразд, ось моє запитання до Джефромі:

  1. Як я дізнаюся, чи тягнув до майстра? Все, що я зробив - це "git pull".

  2. На що вказує майстер і яка різниця між головним та HEAD, двома головами Git за замовчуванням?

  3. Як я бачу детальну зміну конкретного файлу?

  4. Як я бачу зміну підсумкових результатів останніми git pullзнову?

  5. Яка різниця між git diffі git whatchanged?


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

Можливо, через вашу низьку репутацію.
ТЕД

@ TED Це займе лише 50 повторів, щоб залишити коментарі, і 15 - підняти відгуки.
Каскабель

На моєму ноутбуці з Ubuntu, іноді робота іноді не працює. Я тимчасово знайшов ще один комп’ютер із Centos і роблю цей коментар. На обох комп’ютерах я використовую Firefox.
Тім

Дуже дивно. Можливо, ви захочете перейти до мета і подивитися, чи це відома проблема / повідомте про це.
Каскабель

Відповіді:


204

Припустимо, ви тягнете до майстра. Ви можете звернутися до попередньої позиції masterпо master@{1}(або навіть master@{10.minutes.ago}, в розділі уточнюючих переглядів про сторінці людини ГИТ-Rev-синтаксичний аналіз ), так що ви можете зробити що - щось на зразок

  • Переглянути всі зміни: 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"

5
це краще, ніж моє рішення :)
Крістіан Оудар,

2
Я знаю, що це по-старому, але ... Це має бути навпаки: git diff master@{1} masterінакше зміна буде показана "назад", тобто вставки стають видаленнями тощо.
ультракрепідаріан

2
git diff master@{1} masterне працював для мене, замість цього git diff master~1 masterробив роботу за мене.
undealsoul007

5
@ undealsoul007 Тоді у вас ситуація була іншою. master ~ 1 - це батьківська фіксація поточного вказівника одного господаря; ви збираєтесь побачити різницю лише для цього фіксації. master @ {1} - попередній майстер фіксації, на який вказував; якби, наприклад, ти щойно витягнув, це було б місце господаря перед тягненням, як описано тут. Якщо цього не зробили, то, мабуть, ви зробили щось інше, щоб освоїти з моменту, коли ви потягли. Спробуйте git reflog masterзрозуміти, що.
Каскабель

@Jefromi fatal: ambiguous argument 'firstDesign@': unknown revision or path not in the working tree.Я продовжую отримувати цю помилку. Хоча git reflog firstDesign має такий вихід .
undealsoul007

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"
Якуб Нарбскі

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?

Найпростіший і найелегантніший спосіб (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

Таким чином , свого роду Hacky, але це дозволить вам використовувати графічні інструменти , такі як 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.