GIT

Основы

git add

git add --all добавит в коммит все что есть в папка и подпапках

Следующие две команды добавляют в коммит все измененные файлы кроме file.cpp

git add -u

git reset -- path/file.cpp

Аналогично можно создать коммит, используя все файлы, кроме одной директории:

git add -u

git reset -- mydir/*

Знакомство с Git Commit

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

git commit -m "first commit"

Каждый коммит имеет своего родителя(кроме первого), это показано стрелочками.

Ветвление в Git(Ветки в git)

Мы находились на втором коммите и создали новую ветку newImage

git branch newImage

Чтобы сменить нашу ветку нужно сделать

git checkout newImage

Сделаем коммит

git commit

Создание новой ветки и переключение на нее

git checkout -b yourbranchname

git commit

git checkout -b bugfix

git commit

Слияние веток

merge

Вот у нас две ветки, каждая содержит по одному уникальному коммиту. Это означает, что ни одна из веток не содержит полный набор "работ", выполненных в этом репозитории. Можно исправить эту ситуацию, выполнив слияние.

git merge bugfix

Ветка master теперь указывает на коммит, у которого два родителя. Если проследовать по стрелкам от этого коммита, вы пройдёте через каждый коммит в дереве прямиком к началу. Это означает, что теперь в ветке master содержатся все изменения репозитория.

git checkout bugfix

git merge master

Теперь каждая ветка содержит все изменения репозитория

rebase

git rebase master

Теперь изменения из bugFix находятся в конце ветки master и являют собой линейную последовательность коммитов. Коммит С3 до сих пор существует где-то, а С3' - это его "копия" в ветке master. Единственная проблема - ветка master не обновлена до последних изменений.

git rebase bugfix

Detached HEAD

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

git checkout C1

git checkout master

git commit

git checkout C2

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

HEAD -> master -> C1

git checkout C1

А вот что получилось теперь

HEAD -> C1

Относительные ссылки (^)

Относительные ссылки - мощный инструмент, но мы покажем два простых способа использования:

Перемещение на один коммит назад ^

Перемещение на num коммитов назад ~

git checkout master^

Перемещение веток

git branch -f master HEAD~3

Отмена изменение в git

Есть два основных способа отмены изменений в Git: первый - это git reset, а второй - git revert.

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

git reset HEAD~1

Git просто перенёс ссылку на master обратно на коммит C1. Теперь наш локальный репозиторий в состоянии, как будто C2 никогда не существовал. Reset отлично работает на локальных ветках, в локальных репозиториях. Но этот метод переписывания истории не сработает на удалённых ветках, которые используют другие пользователи. Чтобы отменить изменения и поделиться отменёнными изменениями с остальными, надо использовать git revert.

git revert HEAD

Появился новый коммит. Дело в том, что новый коммит C2' просто содержит изменения, полностью противоположные тем, что сделаны в коммите C2. После revert можно сделать push и поделиться изменениями с остальными.

Введение в Cherry-pick

git cherry-pick <Commit1> <Commit2> <...>

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

git cherry-pick C2 C4

Введение в интерактивный rebase

git rebase -i HEAD~4

Rebase over 9000 раз

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

Push & Pull - удалённые репозитории в Git!

Продвинутое использование Git Remotes

Last updated

Was this helpful?