Git справочник
Команды
Настройка
- 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