Предыдущий ролик Следующий ролик  

Видео урок: Получение большей информации из логов коммита

Git: обучение основам

В этом ролике мы поговорим о том, как извлечь максимальную выгоду из логов коммита. Мы уже видели основы, и если мы хотим просмотреть логи репозитория, мы можем написать git log. И тогда вы увидите пронумерованный список того, что находится в логах, а если мы нажмем на пробел, список будет продолжаться, пока не достигнет конца, а Q обозначает выход из него. Это основы git log, но есть много чего, что мы можем еще сделать с логами. По факту, я хочу, чтобы вы посмотрели на страницы Помощи Git для информации по логам, потому что здесь так много опций. Вы можете очень точно определить, что вы ищете, и вытянуть информацию о коммитах, используя все эти опции конфигурации, а сейчас я хочу подчеркнуть наиболее важные из них.

Первой будет git log oneline. Я считаю ее одной из наиболее полезных опций, потому что она дает нам однострочный список того, что находится в файлах с логами, вместо большого списка, который нужно прокручивать, эта опция сжимает список. Она дает нам часть SHA, который мы можем использовать, чтобы обратиться к коммитам, если нужно с ними поработать. Мы также можем использовать число коммитов, чтобы установить лимит на то, сколько коммитов будет показано, например, -3 покажет три коммита, -5 покажет пять коммитов. Мы также можем отфильтровать коммиты по времени.

Например, git log, а затем мы можем использовать опцию since, а затем в кавычках мы можем вставить различное время. Например, 2012-06-20, и Git понимает, что это 2012 год 20ое июня. Нажимаем Return и получаем только те записи, которые были сделаны с тех пор. Мы также можем использовать after вместо since, это синонимы. Также мы можем использовать until, и будут показаны коммиты, сделанные до определенной даты, это синоним опции before. То есть before и until оба работают одним и тем же способом, и мы, естественно, можем комбинировать эти опции. Также мы можем использовать другие форматы.

Например, 2 weeks ago (2 недели назад), просто как строку, и Git нас поймет. И, допустим, 3 days ago (3 дня назад), тогда будет перечислено все в промежутке от двух недель до трех дней назад, нажимаем в конце Return. Вы можете даже просто написать 3.days и 2.weeks, и Git сможет это также понять. Есть много форматов, чтобы сделать одно и то же. Вы свободны в том, как указать временной период.

Мы также можем сделать поиск по автору (author), автор, это человек, который сделал коммит, допустим, мы ищем кого-то с именем Кевин (Kevin), И если бы было несколько Кевинов, были бы показаны все они. А если я напишу Kevin Skoglund (Кевин Скогланд), тогда, конечно, будет показано мое имя, и вот показан Kevin Skoglund. На данном этапе только мы сами делали коммиты, но если бы мы работали с другими людьми, то неплохо фильтровать коммиты и видеть, какие из них сделал, например, Джон. Допустим, я хочу видеть только коммиты Джона, а именно то, что он сделал за последнюю неделю. Мы также можем использовать GREP для сообщений коммитов. GREP - это глобальный поиск регулярных выражений, поэтому мы можем написать git log grep =, а затем в кавычках любое регулярное выражение, которое мы хотим найти. Я ищу temp, и мне будут возвращены две вещи, в которых есть сообщения о файле temp, мы видим оба этих элемента.

Это действительно хорошая возможность, если вы хотите найти коммит по конкретной теме. Вот вы видите, что хорошие сообщения для коммитов очень и очень полезны, потому что они позволяют нам находить элементы в сообщениях, которые касаются конкретных разделов в коде, над которым мы работаем. Мы также можем указать конкретный промежуток (range), давайте напишем git log oneline, и вот мы здесь, и допустим, мы хотим видеть все коммиты, начиная от этого коммита, пишем git log, а затем вставляем этот SHA точка точка, таким образом мы определяем промежуток и говорим начать с этого. Мне будут показаны только эти коммиты, я продолжу и снова пропишу все в одну строку, и нам действительно понятно, что происходит.

Мне показаны коммиты, начиная от этого и заканчивая этим, вот так мы используем диапазон (range). Мы снова будем использовать эту опцию позже. Мы также можем запросить информацию о том, что случилось с конкретным файлом. Например, я могу сказать - скажи мне все, что случилось с тех пор, когда был сделан initial commit, git log от initial commit и вперед, и я могу вставить коммит или просто оставить его пустым. Если в конце диапазона (range) ничего не стоит, мне будет сказано, что случилось с файлом index.html. Я хочу посмотреть логи, которые касаются этого файла, давайте попробуем это сделать.

Есть один подходящий коммит, вот он, и это то, что было изменено в данном файле. Итак, если вы работаете с конкретным файлом и хотите просмотреть историю, чтобы увидеть, что происходило с файлом раньше, логи позволят вам сделать это. Мы можем узнать больше информации о коммитах при помощи git log -p, это опция patch (патч), и она показывает нам разницу в том, что было сделано в каждом из них. Вот здесь сложения, а здесь вычитания. Так что мы действительно можем увидеть разницу. Это действительно удобно, особенно если вы хотите узнать, что произошло с каждым из этих файлов, потому что мы можем вернуться и сразу после log вставить опцию -p, и она не только говорит о том, какие коммиты были применены, она также показывает мне изменения. Я могу получить и то, и другое, каждое отдельное перечисленное изменение, которое случилось с файлом index.html.

Нечто подобное мы можем сделать при помощи git log --stat и --summary, и вы можете их использовать раздельно или вместе. Они покажут вам статистику того, что было изменено в каждом файле, и вот вы видите, в файл игнорирования было кое-что добавлено. Вот здесь в resources что-то было добавлено, а что-то было удалено, а вот здесь эта команда дает нам небольшое резюме о том, что было сделано. Это неплохая возможность, если вам не особо нужны детали того, что было сделано, вы просто хотите узнать о числе изменений и о том, где они были сделаны.

Далее идет log --format, мы уже видели одну из самых полезных опция и это oneline, которая предоставляет логи в одну строку, git log format фактически эквивалентен oneline. Но все же здесь есть небольшая разница, потому что эта опция возвращает полный SHA, а не частичный SHA, так что вы можете сравнить обе эти опции. Вот и все, и вот вы видите разницу между ними. Мы также можем указать другие формы форматов, и поэтому хорошо знать о том, что представляют собой форматы, потому что в дополнение к oneline, мы можем использовать short, или мы можем использовать medium, это по умолчанию, или мы можем использовать full, что дает нам немного больше информации, например, автора коммита, а есть и fuller, которая дает нам еще больше информации.

Здесь есть имейл, который сгенерирован удобным способом для написания имейла, здесь также есть raw. И она показывает нам сырую информацию, которая сохранена в Git. И последняя опция, которая мне нравится и которую я считаю полезной, это git log --graph. Она показывает нам граф каждого из наших коммитов. Прямо сейчас наш граф довольно прост и линеен, но когда у нас будут бранчи, и когда мы начнем ветвление и объединение, тогда эта опция покажет нам, что эти бранчи действительно объединены, мы к этому вернемся немного позже.

Хорошая комбинация этих опций - это git log --oneline --graph --all --decorate, если все это объединить, вы увидите симпатичный компактный список. В нем будут все бранчи, которые имеются в наличие, и эта комбинация даже нам скажет, на что указывает HEAD, а это верхушка основного бранча. Так что это действительная хорошая комбинация опций, которую стоит запомнить. Пожалуйста, поэкспериментируйте, войдите в файлы с логами и найдите форматы, которые полезны для вас и для вашей работы.