Краткий справочник по Git

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

Этот мануал – это шпаргалка, краткий справочник по командам Git, которые полезны для работы и совместной разработки программ в репозитории Git. Чтобы установить и настроить Git, читайте Разработка проектов с открытым исходным кодом: начало работы с Git.

Как пользоваться справочником

  • Этот мануал составлен в формате шпаргалки с отдельными фрагментами команд.
  • Не нужно выполнять все разделы по порядку. Перейдите к тому разделу, который имеет отношение к решаемой вами задаче.
  • Выделенный красным текст в командах нужно заменить своими данными (это, как правило, коммиты и файлы в вашем репозитории).

Инициализация и начало работы с Git

Проверьте версию Git с помощью следующей команды (это также поможет убедиться, что Git установлен).

git --version

Вы можете инициализировать ваш текущий рабочий каталог как Git-репозиторий с помощью команды init.

git init

Чтобы скопировать существующий удаленный Git-репозиторий, используйте команду git clone с URL-адресом репозитория или расположением сервера (в последнем случае нужно использовать ssh).

git clone https://www.github.com/username/repo-name

Просмотреть список текущих удалённых репозиториев Git можно с помощью команды:

git remote

Для более подробного вывода используйте флаг -v.

git remote -v

Добавьте Git upstream: можно указать URL-адрес, а если он размещен на сервере, нужно подключиться по ssh.

git remote add upstream https://www.github.com/username/repo-name

Индексированные файлы

Когда вы изменили файл и отметили его для использования в следующем коммите, он становится индексированным файлом.

Проверьте состояние вашего Git-репозитория, включая индексированные файлы и добавленные файлы, которые не были проиндексированы.

git status

Чтобы индексировать измененные файлы, используйте команду add, которую можно выполнить несколько раз перед коммитом. Если вы последовательно вносите изменения, которые нужно включить в следующий коммит, вы должны снова запустить add.

Вы можете указать в команде конкретный файл.

git add my_script.py

Символ точки (.) позволяет охватить все файлы в текущем каталоге, включая файлы, чье имя начинается с точки.

git add .

Вы можете удалить файл из индекса, сохранив изменения в вашем рабочем каталоге, с помощью команды reset.

git reset my_script.py

Коммиты

После того, как обновления были помещены в индекс, вы готовы их зафиксировать – создать коммит, что запишет изменения, внесенные вами в репозиторий.

Чтобы зафиксировать индексированные файлы, запустите команду commit с сообщением о коммите (эти сообщения позволяют отслеживать коммиты).

git commit -m "Commit message"

Вы можете сжать все индексированные файлы и отправить коммит с помощью одной команды.

git commit -am "Commit message"

Если вам нужно изменить сообщение о коммите, вы можете сделать это с помощью флага —amend.

git commit --amend -m "New commit message"

Ветки Git

Ветка в Git – это подвижный указатель на один из коммитов в репозитории, который позволяет изолировать работу и управлять разработкой и интеграцией функций. Вы можете узнать больше о ветках в документации по Git.

Просмотреть список текущих веток можно с помощью команды branch. Звездочка (*) появится рядом с текущей активной веткой.

git branch

Попробуйте создать новую ветку. Вы останетесь в текущей активной ветке, пока не переключитесь в новую.

git branch new-branch

Перейдите в любую существующую ветку и проверьте ее в текущем рабочем каталоге.

git checkout another-branch

Вы можете объединить создание и проверку новой ветки, используя флаг -b.

git checkout -b new-branch

Переименуйте ветку.

git branch -m current-branch-name new-branch-name

Объедините историю указанной ветки с той, в которой вы сейчас работаете.

git merge branch-name

Прервите слияние, если возникнут конфликты.

git merge --abort

Вы также можете выбрать конкретный коммит для объединения с помощью команды cherry-pick. В команде нужно указать строку, которая ссылается на конкретный коммит.

git cherry-pick f7649d0

Если после слияния ветка вам больше не нужна, вы можете удалить ее.

git branch -d branch-name

Если вы не слили ветку с master, но уверены, что хотите удалить ее, вы можете принудительно удалить ветку.

git branch -D branch-name

Совместная разработка и обновление

Чтобы загрузить изменения из другого каталога, например, из удаленного upstream, используйте команду:

git fetch upstream

Объедините извлеченные коммиты:

git merge upstream/master

Чтобы передать локальные коммиты в ветку удаленного репозитория, введите:

git push origin master

Извлечь и слить все коммиты из удаленной ветки можно с помощью команды:

git pull

Просмотр информации

Чтобы вывести историю коммитов для текущей активной ветки, введите:

git log

Также можно просмотреть коммиты, которые изменили определенный файл. Укажите имя файла (даже если он был переименован).

git log --follow my_script.py

Чтобы просмотреть коммиты конкретной ветки можно использовать следующую команду. Она покажет коммиты в ветке a-branch, которых нет в b-branch.

git log a-branch..b-branch

Чтобы просмотреть логи ссылок (reflog) и увидеть, когда ссылки обновлялись в репозитории последний раз, введите:

git reflog

Вы можете запросить любой объект в Git через строку его коммита или хэш в более удобном для восприятия формате.

git show de754f5

Отображение изменений

Команда git diff показывает изменения между коммитами, ветками и другими компонентами Git. Более подробно об этом вы можете прочитать в документации Git.

Эта команда позволяет сравнить измененные файлы, которые находятся в индексе.

git diff --staged

Эта команда покажет разницу между веткой a-branch и b-branch.

git diff a-branch..b-branch

Увидеть разницу между двумя конкретными коммитами можно с помощью команды:

git diff 61ce3e6..e221d9c

Скрытый код

Бывает, что после изменения некоторого кода нужно начать работать над чем-то другим. Вы не хотите делать коммит (код еще не совсем готов), но и не хотите терять свою работу. Команда git stash позволяет сохранить локальные изменения и вернуться обратно в рабочий каталог, соответствующий последнему коммиту HEAD.

Чтобы скрыть текущую работу, введите:

git stash

Чтобы просмотреть скрытый код:

git stash list

Скрытые изменения будут называться stash@{0}, stash@{1} и так далее.

Вы также можете запросить информацию о конкретном скрытом коде:

git stash show stash@{0}

Чтобы вывести скрытые файлы, сохраняя при этом хранилище, используйте команду apply.

git stash apply stash@{0}

Если вы хотите вывести скрытые файлы и вам больше не нужно хранилище для них, используйте pop.

git stash pop stash@{0}

Если вам больше не нужны файлы, сохраненные в определенном хранилище, вы можете удалить хранилище.

git stash drop stash@{0}

Если у вас есть несколько хранилищ скрытых файлов и одно из них больше не нужно, вы можете удалить его с помощью команды clear.

git stash clear

Игнорирование файлов

Если вы хотите сохранить файлы в локальном каталоге Git, но не хотите фиксировать их в проекте, вы можете добавить эти файлы в свой файл .gitignore, чтобы они не вызывали конфликтов.

Используйте текстовый редактор, например nano, чтобы добавить файлы в файл .gitignore.

nano .gitignore

Примеры файлов .gitignore можно найти на GitHub.

Перебазирование

Перебазирование позволяет перемещать ветки, изменяя коммит, на котором они основаны. Таким образом вы можете сократить или перефразировать коммиты.

Чтобы начать перебазирование, нужно указать количество совершенных вами коммитов, которые вы хотите перебазировать (например, 5).

git rebase -i HEAD~5

Также перебазирование можно выполнить на основе конкретной строки коммита или хэша.

git rebase -i 074a4e5

После того, как вы изменили коммиты, вы можете переместить ветку в начало последней версии исходного кода проекта.

git rebase upstream/master

Чтобы узнать больше о перебазировании и обновлении, читайте Перемещение и обновление pull-запросов.

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

В некоторых случаях (иногда после перемещения) возникает необходимость отменить изменения в рабочем дереве. Вы можете отменить все до определенного коммита или удалить все изменения с помощью команды:

git reset --hard 1fc6665

Чтобы принудительно отправить последний неконфликтующий коммит в исходный репозиторий, нужно использовать —force.

Важно! Принудительно отправлять коммиты в ветку master не рекомендуется, если только для этого нет действительно важной причины. Используйте эту команду с осторожностью при работе с собственными репозиториями и старайтесь избегать ее в совместной разработке.

git push --force origin master

Чтобы удалить локальные неотслеживаемые файлы и подкаталоги из каталога Git (чтобы очистить рабочую ветку), вы можете использовать git clean.

git clean -f -d

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

Примечание: Эта команда сделает локальный репозиторий похожим на upstream. Любые ваши коммиты, которые вы не отправили в upstream, будут уничтожены.

git reset --hard upstream/master

Заключение

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

Узнать больше об открытом программном обеспечении и совместной работе можно в нашей серии мануалов:

Есть еще много команд и вариаций, которые будут полезны при работе с Git. Чтобы узнать больше обо всех доступных параметрах, вы можете запустить справку:

git --help

Получить полезную информацию и посмотреть документацию Git можно на официальном сайте Git.

Tags: