Команды разработчиков и сопроводителей программного обеспечения с открытым исходным кодом обычно управляют своими проектами через 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 – это подвижный указатель на один из коммитов в репозитории, который позволяет изолировать работу и управлять разработкой и интеграцией функций.
Просмотреть список текущих веток можно с помощью команды 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.
Перебазирование (git rebase)
Перебазирование позволяет перемещать ветки, изменяя коммит, на котором они основаны. Таким образом вы можете сократить или перефразировать коммиты.
Чтобы начать перебазирование, нужно указать количество совершенных вами коммитов, которые вы хотите перебазировать (например, 5).
git rebase -i HEAD~5
Также перебазирование можно выполнить на основе конкретной строки коммита или хэша:
git rebase -i 074a4e5
После того, как вы изменили коммиты, вы можете переместить ветку в начало последней версии исходного кода проекта.
git rebase upstream/master
Чтобы узнать больше о перебазировании и обновлении, читайте Перемещение и обновление pull-запросов.
Отмена изменений
В некоторых случаях (иногда после перемещения) возникает необходимость отменить изменения в рабочем дереве. Вы можете отменить все до определенного коммита или удалить все изменения с помощью команды:
git reset --hard 1fc6665
Чтобы принудительно отправить последний неконфликтующий коммит в исходный репозиторий, нужно использовать ключ –force.
git push --force origin master
Чтобы удалить локальные неотслеживаемые файлы и подкаталоги из каталога Git (чтобы очистить рабочую ветку), вы можете использовать git clean.
git clean -f -d
Если вам нужно изменить локальный репозиторий так, чтобы он выглядел как текущий ведущий upstream master (то есть у них слишком много конфликтов), вы можете выполнить полную перезагрузку.
git reset --hard upstream/master
Заключение
В этом справочнике рассматриваются некоторые из наиболее распространенных команд Git, которые вы можете использовать при управлении репозиториями и совместной работе над программным обеспечением.
Узнать больше об открытом программном обеспечении и совместной работе можно в нашей серии мануалов:
- Разработка проектов с открытым исходным кодом: начало работы с Git
- Создание pull-запроса на GitHub
- Перемещение и обновление pull-запросов
- Поддержка проектов с открытым исходным кодом
Есть еще много команд и вариаций, которые будут полезны при работе с Git. Чтобы узнать больше обо всех доступных параметрах, вы можете запустить справку:
git --help
Получить полезную информацию и посмотреть документацию Git можно на официальном сайте Git.