Fork me on GitHub

про 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 {имя_файла}

см Режимы  git reset

Режимы 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

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

social