Заметки с тегом «git»

Поиск объединённых веток в Git

Я уже писал о том как получить список комитов, из которого можно сделать текстовый файл с изменениями между двумя ветками.

Если вы придерживаетесь подхода «одна фича — один бранч» и не делаете значимых комитов без веток, то вам подойдёт другой способ:

git branch -r --merged staging | \
  grep -v -E `(git branch -r --merged master | \
    tr "\n" " " | \
    sed -e "s/^ *//" -e "s/ *$//" | \
    tr -s " " "|")`

Эта последовательность команд выдаст список веток, которые были объединены в staging, но ещё не попали в master.

Оставте свой комментарий

Создание списка изменений из Git

Список всех коммитов от указанного объекта до HEAD можно легко получить с помощью команды

git log 1ff893.. --pretty=format:%s --no-merges > changes.txt

В файл changes.txt будут записаны только названия комитов, начиная с 1ff893 и до текущего состояния, за исключением точек слияния. В качестве начального объекта можно указать название тега или ветви.

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

Дерево коммитов с точками слияния

Если, например, попытаться получить лог от S до F, то в файл буду записаны коммиты с номерами от 1 до 8. Коммиты M — это точки слияния, которые сами по себе не несут никакой новой функциональности, не будут включены в лог.

Дополнение

Оставте свой комментарий

Изменение регистра букв в названиях файлов в Git

При работе с Git в Windows есть неприятная проблема: если в имени файла неправильно были указаны заглавные и строчные буквы, то после простого переименования файла git status не покажет изменений. Это связано с тем, что ни FAT32, ни NTFS не учитывает регистр букв.

Если такая ситуация всё же возникла, то переименовать файл можно средствами Git:

git mv filename.txt FileName.txt –f

Ключ -f как раз нужен для того, чтобы принудительно внести изменения, так как с точки зрения файловой системы эти имена эквивалентны.

Обновление

Выходит, что разработчики, пользующиеся OS X, так же могут столкнуться с аналогичной ситуацией.

Комментарии к заметке: 3

Как git rebase помогает управлять коммитами

Команду git rebase обычно применяют тогда, когда хотят избежать точек слияния в ветке, применяя пулл-реквесты, или в процесс работы в одной ветке нескольких человек. Этот классический случай подробно разбирается во многих статьях.

Но, нигде не упоминается об интерактивном режиме и его возможностях. В этом режиме можно переставлять коммиты местами, объединять и разделять их, менять комментарии у произвольного коммита. Всё это может понадобиться, если использовать подход «микрокоммитов».

Комментарии к заметке: 1

Уборка мусора в Git

Удалить все неиспользуемые объекты можно командой

git gc

После объединения ветки, в которой велась разработка, с основной веткой проекта всегда остается указатель на эту ветку. Ваш коллега может удалить её у себя в репозитории и даже удалить её во внешнем репозитории, но ваш локальный репозиторий всё ещё будет хранить информацию об этой ветке.

Удалить все ветки, которых нет во внешнем репозитории можно командой

git remote prune origin

Если даже на какой-либо объект нет явной ссылки, то на протяжении 30 дней на все объекты сохраняется ссылка в reflog. По этому когда производится уборка мусора все коммиты за последний месяц всё равно остаются в репозитории.

Чтобы избавиться от таких недоступных комитов, выполним последовательность команд

git reflog expire --expire=1.minute refs/heads/master
git fsck –unreachable
git gc
Оставте свой комментарий