Основные команды и определения

  1. Коммиты
  2. Ветвления
  3. Слияния
  4. Git Rebase
  5. HEAD
  6. Относительные ссылки
  7. Перемещение ветки (branch forcing)
  8. Отмена изменений в Git
  9. Git Reset
  10. Git Revert
  11. Git Cherry-pick
  12. Git Interactive Rebase

Коммиты

Коммит в git-репозитории хранит снимок всех файлов в директории. Коммит — это набор изменений или «дельта» между текущей версией и предыдущей.

Код Описание
git commit Коммит

Ветвления

Ветки — это просто ссылки на определённый коммит — ничего более.

Код Описание
git branch [name] Создание ветки
git checkout [name] Переключение ветки

Слияния

Слияния в Git создают особый вид коммита, который имеет сразу двух родителей. Коммит с двумя родителями обычно означает, что мы хотим объединить изменения из одного коммита с другим коммитом и всеми их родительскими коммитами.

Код Описание
git merge [name] Слияние веток


Git Rebase

При rebase Git по сути копирует набор коммитов и переносит их в другое место. Преимущество rebase в том, что c его помощью можно делать чистые и красивые линейные последовательности коммитов. История коммитов будет чище, если вы применяете rebase.

Код Описание
git rebase [name] Rebase


HEAD — это символическое имя текущего выбранного коммита — это, по сути, тот коммит, над которым мы в данным момент работаем. HEAD всегда указывает на последний коммит из вашего локального дерева. Большинство команд Git, изменяющих рабочее дерево, начнут с изменения HEAD.

Отделение (detaching) HEAD

Отделение (detaching) HEAD означает лишь присвоение его не ветке, а конкретному коммиту.

Код Описание
HEAD -> master -> C1
git checkout C1
HEAD -> C1 Отделение (detaching) HEAD


С относительными ссылками можно начать с какого-либо удобного места (например, с ветки или от HEAD) и двигаться от него.

Код Описание
git checkout [name]^ Перемещение на один коммит назад
git checkout [name]~[num] Перемещение на num коммитов назад


Перемещение ветки (branch forcing)

Одна из наиболее распространённых целей, для которых используются относительные ссылки - это перемещение веток. Можно напрямую прикрепить ветку к коммиту при помощи опции -f.

Код Описание
git branch -f master HEAD~3 Переместить (принудительно) ветку master на три родителя назад от HEAD.


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

Есть много путей для отмены изменений в Git. Так же как и коммит, отмена изменений в Git возможна и на низком уровне (добавление в коммит отдельных файлов и наборов строк), и на высоком (как изменения реально отменяются). Сейчас сфокусируемся на высокоуровневой части.

Есть два основных способа отмены изменений в Git.

git reset [name]

git revert [name]


Git Reset

Git reset отменяет изменения, перенося ссылку на ветку назад, на более старый коммит. Это своего рода "переписывание истории"; git reset перенесёт ветку назад, как будто некоторых коммитов вовсе и не было.

Код Описание
git reset HEAD~1 Git просто перенёс ссылку на master обратно на коммит C1. Теперь наш локальный репозиторий в состоянии, как будто C2 никогда не существовал.


Git Revert

Git reset отлично работает на локальных ветках, в локальных репозиториях. Но этот метод переписывания истории не сработает на удалённых ветках, которые используют другие пользователи.

Чтобы отменить изменения и поделиться отменёнными изменениями с остальными, надо использовать git revert.

Код Описание
Git revert HEAD Новый коммит C2' просто содержит изменения, полностью противоположные тем, что сделаны в коммите C2.


Git Cherry-pick

Это очень простой и прямолинейный способ сказать, что ты хочешь копировать несколько коммитов на место, где сейчас находишься (HEAD).

Код Код
git cherry-pick [commit1] [commit2] [...] git cherry-pick C2 C4


Git Interactive Rebase

Git cherry-pick применяется, когда точно известно, какие коммиты нужны (и известны их точные хеши).

Но, в случае, когда точно не известно какие коммиты нужны можно использовать интерактивный rebase — лучший способ отобрать набор коммитов для rebase.

Код Код Описание
git rebase -i [name] git rebase -i HEAD~4 Rebase ordering C3, C4


results matching ""

    No results matching ""