Команды

Настройка

  • git config –list [–global]- список всех настроек, также хранятся в файле config
  • git config –global core.autocrlf true - символы окончания строки для windows
  • git config –global core.safecrlf true - тоже нужно для работы в windows
  • git config –global user.name - установить имя пользователя для подписи коммитов
  • git config –global user.email - установить почту
  • git config –global core.editor - изменение текстового редактора по-умолчанию
  • git config –global push.default - пуш по умолчанию - matching (способ публикации веток)
  • git config –global merge.tool tortoisemerge - установка утилиты, которая будет мержить
  • git config –global mergetool.keepBackup false - отключение генерации бэкап файлов при мержинге

Идентификация

  • git config –global user.name “Your Name”
  • git config –global user.email “your_email@whatever.com”

Для пользователей Unix/Mac:

  • git config –global core.autocrlf input
  • git config –global core.safecrlf true

Для пользователей Windows:

  • git config –global core.autocrlf true
  • git config –global core.safecrlf true Алиасы - полезная тема

Начало работы

  • git init - создать или переинициализировать репозиторий
  • git clone - загрузить репозиторий
  • git status - отображает состояние вашего репозитория и где находишься
  • –help - выводит помощь по команде, напротив которой была указана директива
  • gitk - графическая утилита, которая отображает граф
  • git add . - добавление/индексирование всех файлов, можно указать файл, маску файла, директорию (рекурсивно)
  • git commit -m ‘Added README’ - сделать коммит с комментарием
  • git log - история коммитов
  • git log –graph –all –oneline [–source] - дерево коммитов наглядно
  • git show - просмотр изменений коммита

Нюансы

  • git commit -v - прокидывает в комментарий diff изменений
  • git commit -a - пропускает индексирование для уже отслеживаемых файлов и делает это автоматически
  • git commit –amend - закомитить изменения к предыдущему
  • git commit –amend -m ‘new’ - коммит с изменением комментария
  • git log -p -2 - служит для просмотра нескольких коммитов
  • git rm - удаление файла из репозитория и из каталога, (!) при директиве –cached - файл в каталоге остается
  • git mv file_from file_to - перемещение файлов, три функции в одной
  • git diff - сравнить какие изменения были
  • git reflog - восстановление коммита, который по ошибке был удален

Удаленный репозиторий

  • git remote add origin - добавление удаленного репозитория с алиасом origin
  • git remote -v - показать пути к удаленным хранилищам
  • git remote show - инфо по отслеживаемым веткам
  • git push -u origin master - флаг u говорит, чтобы запомнил параметры и в следующий раз можно будет вызвать просто git push
  • Для игнора бинарных данных необходимо скачать .gitignore для Visual Studio с glob-шаблонами
  • git push origin - опубликовать на удаленный сервер уже существующую ветку
  • git push origin : - удаление ветки или git push origin --delete
  • git fetch <репозиторий> - получение данных из удаленных проектов без мерджа
  • git pull origin develop - получить новые изменения себе из хранилища и смержить их
  • git push origin -u - перепривязать текущую ветку к новой удалённой ветке

Ветвление

  • git branch - получить список веток, параметром -v отображаются последние коммиты в них, параметры –merged и –no-merged - отобразить ветки, которые были слиты с текущей или еще не слиты соответственно
  • git branch -v -a - получить список всех веток, в том числе и origin
  • git branch -vv более подробная информация, например, можно увидеть какие ветки трекаются
  • git branch - создать ветку
  • git branch - создать ветку, указывающую на хэш коммита
  • git branch -d - удалить указанную ветку, параметр -D форсит
  • git branch -m - переименование ветки из любой ветки
  • git branch -m - переименование текущей ветки
  • git push origin :old-name new-name - переименовать удаленную ветку и запушить в новую ветку
  • git checkout -b - создать ветку и сразу перейти на нее, 2 команды: git branch ; git checkout
  • git checkout –track - переключение в локальную ветку с трасировкой удаленной ветки с таким же названием
  • git checkout -b origin/ - включить отслеживание удаленной ветки
  • git fetch origin - получить удаленные изменения
  • git fetch -p - удаление веток, которых уже нет в remote
  • git checkout -b test origin/test - получить удаленную ветку из origin/test в test

  • git checkout - переключение на ветку с именем name
  • git stash - прятать неподготовленный еще код для коммита для последующего переключения на другую ветку, можно оставлять каммент по флагу -m 'some message'
  • git stash list - список припрятанных изменений
  • git stash apply - вернуть изменения обратно по имени, либо последнюю - без имени
  • git stash drop - удаление спрятанного
  • git stash pop - применить изменения и удалить сразу из стека
  • git stash branch - создание новой ветки из спрятанных изменений

Метки

  • git tag - получить список тегов
  • git tag -a -m 'description' [commit hash]- пометить коммит тегом (аннотированной меткой) с описанием, описание можно не указывать
  • git tag - создание легковесной временной метки для коммита
  • git push origin - выложить тег на сервер
  • git push origin –tags - отправить все метки на сервер

Слияние и перемещение

  • git merge - смержить в текущую ветку с изменениями из ветки name
  • git merge –no-ff '' - предотвращение FastForward, то все равно создавать коммит
  • git commit - закончить мерджинг
  • git mergetool - запуск графического мерджинга файлов
  • git mergetool –tool=tortoisemerge - мержинг с помощью установленной утилиты от tortoise
  • git rebase origin master - перемещение
  • git rebase –abort - отмена перемещения, указатель HEAD переходит обратно в ветку
  • git rebase –continue - продолжить после устранения конфликтов
  • git rebase –skip - пропустить создание коммита, может быть состояние, когда для него изменений нет
  • git pull –rebase origin [master] - получение изменений из ветки и накат своих изменений с помощью rebase
  • git rebase <куда> - текущую ветку перебазируем в <куда>, добавляются все коммиты, добавленные вне <куда>
  • git rebase –onto <куда> <начиная с="" этого="" коммита=""> - перенести текущую ветку, в ветку куда, начиная с коммита
  • git rebase –onto <куда поместить, либо в текущую><от какой="" ветки=""> <какую ветку=""> - из одной ветки в другую, перед командой идет checkout <какую ветку="">
  • git rebase -i <с какого коммита/ветки>- находимся в той ветке, которую будем схлапывать, команды сначала pick, потом squash
  • git cherry-pick - копирует в текущую ветку коммит
  • git cherry-pick master~2..master - диапазон коммитов, последние 2 из мастера

Отмена изменений

  • git checkout – . - отмена всех изменений, если вместо точки имя файла - отмена изменений в файле, если изменения не в stage
  • git reset . - убрать из stage’а изменения, можно использовать имя файла
  • git revert HEAD - отменить последний коммит, можно добавить флаг –no-edit не открывая редактор
  • git reset –soft HEAD^1 - отмена последнего коммита, но оставить изменения в stage
  • git reset –hard HEAD^1 - отмена последнего коммита с потерей изменений

Создание алиаса

  • git config –global alias.stash-unapply ‘!git stash show -p git apply -R’
  • git stash
  • #… work work work
  • git stash-unapply

Сабмодули

  • git submodule update –init –recursive - обновить все модули
  • git pull –recurse-submodules
  • git submodule update –remote –recursive

Полезные команды

  • rev-parse --verify HEAD - получение хэша последнего коммита

Общая информация

Это распределенная система управления версиями файлов, первая версия выпущена в 2005 году. Позволяет вести совместную работу с данными текстового формата.

Тезисно

Конспект Файлы могут быть:

  • неизмененными (unmodified)
  • измененными (modified)
  • подготовленные к коммиту (staged)
  • неотслеживаемые файлы - все остальное (untracked) При клонировании все файлы становятся отслеживаемые и неизмененные.

Working directory - локальная папка, с которой идет работа Staging Area - область подготовленных файлов к коммиту - отдельный файл. Также называется индексом. Committed - зафиксированная версия файла

Ветвление При переключении с ветки на ветку нужно иметь чистое состояние - либо закомиченные изменения, либо stash (прятать), либо в последствии использовать amend (правку коммита).

Удаленные ветки - это ссылки на состояния в удаленных репозиториях. Двигаются самостоятельно, когда осуществляется связь по сети.

Под каждое логическое изменение лучше использовать отдельный коммит, под задачи разработки, исправление бага, хотфикс отдельную ветку.

Компоненты и определения

  • Repository (репозиторий) - это папка .git с хранящимися в ней файлами и папками
  • Workspace - папка, где хранятся файлы, с которыми работает пользователь и здесь же хранится ‘.git’
  • Bare-repo - на серверах рабочие файлы не хранятся, а хранятся только голые репозитории.
  • Index - все то что подготовлено к сохранению в репозиторий
  • Commit - изменение, отправленные в репозиторий, может иметь несколько дочерних коммитов и несколько предков
  • Merge - слияние двух и более коммитов
  • Branch - ветка, именованный указатель чтобы запомнить коммит
  • Tag - нужен для того, чтобы раз и навсегда запомнить коммит и никуда не двигаться
  • Head - указатель на коммит, в котором мы сейчас находимся
  • Master - имя ветки по-умолчанию, это также указатель на определенный коммит
  • Origin - имя удаленного репозитория по-умолчанию
  • Checkout - взять из репозитория какое-либо его состояние
  • Fastforward - объединение без конфликтов, если существует прямой путь от точки А к Б, при движении только в одну сторону

Команды и операции

  • push - загрузка изменений в хранилище
  • pull - получение изменений из хранилища и мерджить (fetch + merge)
  • fetch - забрать состояние из хранилища, не мерджить
  • merge - сведение двух изменений в один файл, когда конфликты невозможно решить автоматически
  • rebase - указание нового начала и воспроизведение коммитов один за одним, на них накатывая локальные изменения, позволяет избежать дополнительных петель для того, чтобы история была более аккуратной
  • stash - отложить изменения, чтобы потом запушить

Полезные инструменты

В связке с Git под Windows удобно использовать

  • GitExtensions - очень популярный GUI
  • TortoiseGit - визуальная оболочка для управления гитом, особенно удобна для сравнения при операциях merge и rebase

Полезные статьи