Сводка изменений в нескольких коммитах Git - PullRequest
2 голосов
/ 24 января 2011

Я хотел бы получить сводку изменений в нескольких непоследовательных коммитах Git.Вот пример:

  • Фиксация 1: добавлены изменения A и B в alpha.html и изменение C в beta.html
  • Фиксация 2: отменено изменение C в beta.html
  • Коммит 3: заменено изменение B на D и добавлено изменение E

Я хочу получить сводку, подобную этой:

  • Файл alpha.html содержит измененияA, D и E (не нужно упоминать B)
  • Файл beta.html не изменился

Возможно ли это?(Это действительно похоже на Сравнить в Github.)

Спасибо!

Ответы [ 3 ]

3 голосов
/ 24 января 2011

Для меня это звучит как git diff.

git diff commit1 commit3

Это покажет имена файлов и строки, которые изменились между этими двумя коммитами.Если вы используете git из командной строки, я рекомендую включить цвета.Это значительно облегчит чтение различий:

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto

Существуют также некоторые программы, которые могут визуализировать вывод различий в графическом виде.(Например, kompare в Linux)

0 голосов
/ 12 июля 2018

Я искал что-то похожее, за исключением вашего требования «не подряд». Я делюсь этим на тот случай, если это поможет кому-то, кто пришел сюда с тем же вопросом, что и я (похожий на ваш), или если он поможет вам приблизиться к вашему ответу.

У меня есть ветвь функций, которая отличается от главной - т.е. обе ветки имеют новые коммиты со времени их последнего общего предка, и я хочу знать, что изменится ветка feature Попробуй ввести, если слился с мастером.

git diff master feature не будет делать то, что я хочу, потому что каждое новое изменение в мастере, поскольку функция разветвлена, будет отображаться отрицательно , потому что функция не имеет его. Я хочу видеть только положительную работу, проделанную над функцией.

git log --stat master..feature подходит ближе, показывая мне файлы, измененные каждым коммитом на объекте, так как он отличался от основного. Но все еще трудно использовать, если функция имеет десятки новых коммитов.

Что я хочу увидеть, так это «сжатую» версию ветви функций изменений, которая содержит относительно мастера, но игнорирует изменения, внесенные в мастер после ветвления.

Вот что у меня работает:

# get the commit ID of the last common ancestor
git merge-base feature master

# show the diff from that ancestor to the head of feature branch
# (works with --stat option too, to summarize changes)
git diff <ancestor ID> feature

# combined form:
git diff `git merge-base feature master` feature
0 голосов
/ 24 января 2011

Ну, вы можете сделать что-то вроде этого:

for c in $commits; do
    echo $c
    git show --name-status $c
    echo
done

И вы можете написать сценарий вокруг него, чтобы сделать его все более и более привлекательным, пока не получите желаемый формат вывода. Замените $commits на что-то вроде $(git rev-list --author=Me master..topic), чтобы создать дамп в списке коммитов. Взбейте все выходные данные и перегруппируйте их в список файлов (awk был бы хорош в этом). И так далее, и тому подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...