Полезные ссылки
- Список курсов по Git
- Обучающий курс про Git (русский)
- Git Branching
- Обучалка по Git
- Шпаргалка по Git
Настройка конфигурации Git
- посмотреть все настройки
git config --list
- проверить какой редактор открывается по умолчанию
git config --global -e
- установка редактора emacs в консольном режиме
git config --global core.editor "emacs -nw"
Из локального репозитория на GitHub
Наш проект может размещатся в любом каталоге. Для него нужно инициализировать git. Это стандартная процедура:
git init
git add .
git commit -m "Init"
Теперь для проекта git работает и его можно использовать по своему усмотрению: добавлять версии, смотреть логи, делать ветки и т.п.
Для связи с GitHub'ом следует указать удаленный репозиторий:
git remote add origin https://github.com/USER/demo.git
git push -u origin master
История изменений
- Однострочный вывод истории изменений
git log --pretty=oneline
- Интересный вывод историй изменений:
git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short
Внесение изменений в коммиты
git add hello.html
git commit --amend -m "Add an author/email comment"
Создание веток
git checkout -b <имяветки> является шорткатом для git branch <имяветки> за которым идет git checkout <имяветки>.
Размещение ваших git репозиториев
Запуск git сервера
# (From the work directory)
git daemon --verbose --export-all --base-path=.
# (From the work directory)
git clone git://localhost/hello.git network_hello
cd network_hello
ls
Вы увидите копию проекта hello.
Откат изменений
git reset {--hard|--soft} HEAD {имя_файла}
Режимы reset
- жесткий ресет - состояния директории и индекса меняет как было при указанном коммите
-
мягкий ресет - обычно используют если вдруг ошибся при коммите (что-то не доделал или еще что-нибудь), не меняет содержимое каталога и индекса, а просто перемещает HEAD на указанный коммит
-
жесткий ресет из коммита HEAD
git reset --hard
- жесткий ресет из указанного коммита
git reset --hard коммит
- мягкий ресет
git reset --soft коммит
*мягкий ресет на предыдущий коммит
git reset --soft @~
- чтобы откатить изменения т что есть в коммите и также удалить все остальные файлы и директории которые неотслеживаемые
git reset --hard
git clean -dxf
Исправление ошибок в коммитах
источник: https://habr.com/company/ruvds/blog/425665/ Здесь мы рассмотрим несколько сценариев появления ошибок в коммитах и их исправления.
Сценарий №1
Предположим, вы закоммитили много файлов и поняли, что сообщение коммита получилось не особенно понятным. После этого вы решили данное сообщение изменить. Для того чтобы это сделать, воспользуйтесь командой git commit --amend. Вот пример её применения:
git commit --amend -m "New commit message"
Сценарий №2
Предположим, вы хотели закоммитить шесть файлов, но, по ошибке, закоммитили лишь пять. Кажется, что исправить эту ошибку можно, просто создав новый коммит и добавив туда недостающий шестой файл.
Такой подход вполне имеет право на жизнь. Но для того, чтобы поддерживать историю коммитов в хорошем состоянии, вероятно, было бы куда лучше иметь возможность добавить случайно пропущенный файл в тот же коммит. Сделать это можно, опять же, командой git commit --amend. Выглядит её использование так:
git add file6
git commit --amend --no-edit
Флаг --no-edit означает, что сообщение коммита не меняется.
Сценарий №3
К коммитам, которые делают в Git, привязаны имя автора и адрес его электронной почты. Обычно эти данные указывают, выполняя первоначальную настройку Git. В результате тот, кто использует Git, может, выполняя каждый коммит, не заботиться о сведениях об его авторе.
При этом вполне возможна ситуация, когда, при работе с некоторыми проектами, будет нужно пользоваться сведениями об авторе, например — адресом электронной почты, отличающимися от основных. Для подобного проекта нужно указать адрес электронной почты, воспользовавшись такой командой:
git config user.email "your email id"
Предположим, вы забыли выполнить такую настройку и уже сделали первый коммит. Исправить положение может уже знакомая нам команда amend. С её помощью можно изменить сведения об авторе предыдущего коммита:
git commit --amend --author "Author Name <Author Email>"
Теги
- создание обычного тега (теги обычно используются при маркировки релизов)
git tag имя_тега коммит
- создание аннотированного тега (с дополнительной информацией)
git tag -a имя_тега
```
* удаление тегов
```bash
git tag -d имена_тегов
Использование тегов для экспорта
- получить ближайший тег
git describe коммит
- поместить архив проекта с указанного коммита(тега)
git archive -o путь_для_архива коммит_или_тег
Слияние и разрешение конфликтов
источник: Слияние – Истинное слияние и разрешение конфликтов в git merge
git merge ветка
- узнать на каком коммите где ветки разделились
git merge-base ветка1 ветка2
Копирование коммитов: cherry-pick
git cherry-pick коммит
Перебазирование веток: rebase
git rebase ветка
- отмена rebase и возврать HEAD в предыдущее состояние
git rebase --abort
- отмена rebase, но HEAD остается на том коммите когда был превран rebase
git rebase --quit
- пропустить конфликтный коммит
git rebase --skip
- продолжить rebase
git rebase --continue
Получить ветку из удаленного репозитория
git fetch origin
git checkout -b <название ветки> origin/<название ветки>