Шпаргалка по Git
Вступление
Команды разработчиков и специалистов по сопровождению программного обеспечения с открытым исходным кодом обычно управляют своими проектами через Git, распределенную систему управления версиями, поддерживающую совместную работу.
Это руководство в стиле шпаргалки содержит краткий справочник по командам, которые полезны для работы и совместной работы в репозитории Git.
Как использовать это руководство:
- Это руководство представлено в формате шпаргалки с автономными фрагментами командной строки.
- Перейдите к любому разделу, имеющему отношение к задаче, которую вы пытаетесь выполнить.
- Когда вы видите
highlighted textв этом руководстве, имейте в виду, что этот текст должен относиться к коммитам и файлам в вашем собственном репозитории.
Настройка и инициализация
Проверьте свою версию Git с помощью следующей команды, которая также подтвердит, что Git установлен:
git --version
Git позволяет настроить ряд параметров, которые будут применяться ко всем репозиториям на вашем локальном компьютере. Например, настройте имя пользователя, которое Git будет использовать для подтверждения любых изменений, внесенных вами в локальный репозиторий:
git config --global user.name “firstname lastname”
Настройте адрес электронной почты, который будет связан с каждым маркером истории:
Также настройте предпочтительный текстовый редактор:
git config --global core.editor “nano”
Вы можете инициализировать текущий рабочий каталог как репозиторий Git с помощью init:
git init
Чтобы скопировать существующий репозиторий Git, размещенный удаленно, вы будете использовать git cloneURL-адрес репозитория или местоположение сервера (в последнем случае вы будете использовать ssh):
git clone www.github.com/username/repo-name
Покажите удаленный репозиторий вашего текущего каталога Git:
git remote
Для более подробного вывода используйте -vфлаг:
git remote -v
Добавьте восходящий поток Git, который может быть URL-адресом или может быть размещен на сервере (в последнем случае подключитесь с помощью ssh):
git remote add upstream www.github.com/username/repo-name
Постановка (staging)
Когда вы изменили файл и пометили его для следующего коммита, он считается промежуточным файлом.
Проверьте состояние вашего репозитория Git, включая добавленные файлы, которые не были помещены в промежуточные файлы, и файлы, которые были помещены в промежуточные файлы:
git status
Чтобы подготовить измененные файлы, используйте addкоманду, которую вы можете запускать несколько раз перед фиксацией. Если вы вносите последующие изменения, которые хотите включить в следующую фиксацию, вы должны запустить ее addснова.
Вы можете указать конкретный файл с помощью add:
git add my_script.py
С помощью .вы можете добавить все файлы в текущий каталог, включая файлы, начинающиеся с .:
git add .
Если вы хотите добавить все файлы в текущем каталоге, а также файлы в подкаталогах, вы можете использовать флаг -allили :-A
git add -A
Вы можете удалить файл из подготовки, сохранив изменения в вашем рабочем каталоге с помощью reset:
git reset my_script.py
Совершение (commiting)
После того, как вы подготовили свои обновления, вы готовы их зафиксировать, что запишет изменения, внесенные вами в репозиторий.
Чтобы зафиксировать промежуточные файлы, вы запустите commitкоманду со своим осмысленным сообщением о коммите, чтобы вы могли отслеживать коммиты:
git commit -m "Commit message"
Вы можете сжать промежуточную подготовку всех отслеживаемых файлов, зафиксировав их за один шаг:
git commit -am "Commit message"
Если вам нужно изменить сообщение коммита, вы можете сделать это с помощью --amendфлага:
git commit --amend -m "New commit message"
Ветки (branches)
Ветка в 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
Если вы не объединили ветку с основной, но уверены, что хотите ее удалить, вы можете принудительно удалить ветку:
git branch -D branch-name
Сотрудничайте и обновляйте
Чтобы загрузить изменения из другого репозитория, например из удаленного восходящего потока, вы будете использовать fetch:
git fetch upstream
Объедините извлеченные коммиты. Обратите внимание, что некоторые репозитории могут использовать masterвместо main:
git merge upstream/main
Отправьте или передайте коммиты вашей локальной ветки в ветку удаленного репозитория:
git push origin main
Извлеките и объедините любые коммиты из удаленной ветки отслеживания:
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
Показ изменений (show changes)
Команда git diffпоказывает изменения между фиксациями, ветвями и т. д. Более подробно об этом можно прочитать в документации Git .
Сравните измененные файлы, которые находятся в тестовой области:
git diff --staged
Показать разницу того, что есть, a-branchно не есть b-branch:
git diff a-branch..b-branch
Покажите разницу между двумя конкретными коммитами:
git diff 61ce3e6..e221d9c
Отслеживайте изменения пути, удаляя файл из вашего проекта и подготавливая это удаление к фиксации:
git rm file
Или измените существующий путь к файлу, а затем выполните перемещение:
git mv existing-path new-path
Проверьте журнал фиксации, чтобы увидеть, были ли перемещены какие-либо пути:
git log --stat -M
Тайник (stashing)
Иногда вы обнаружите, что внесли изменения в какой-то код, но прежде чем вы закончите, вы должны начать работать над чем-то другим. Вы не совсем готовы зафиксировать изменения, которые вы сделали до сих пор, но вы не хотите потерять свою работу. Команда 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}
Если вам больше не нужны файлы, сохраненные в определенном тайнике, вы можете drop:
git stash drop stash@{0}
Если у вас сохранено несколько тайников и вам больше не нужно использовать ни один из них, вы можете использовать clearдля их удаления:
git stash clear
Игнорирование файлов
Если вы хотите хранить файлы в своем локальном каталоге Git, но не хотите фиксировать их в проекте, вы можете добавить эти файлы в свой .gitignoreфайл, чтобы они не вызывали конфликтов.
Используйте текстовый редактор, например nano, чтобы добавить файлы в .gitignoreфайл:
nano .gitignore
Чтобы увидеть примеры .gitignoreфайлов, вы можете посмотреть репозиторий .gitignoreшаблонов GitHub .
Перебазирование
Rebase позволяет нам перемещать ветки, изменяя фиксацию, на которой они основаны. С помощью ребазинга вы можете раздавить или перефразировать коммиты.
Вы можете начать перебазирование, вызвав количество сделанных вами коммитов, которые вы хотите перебазировать ( 5в случае ниже):
git rebase -i HEAD~5
В качестве альтернативы вы можете перебазировать на основе определенной строки коммита или хэша:
git rebase -i 074a4e5
После того, как вы сжали или переформулировали коммиты, вы можете выполнить перебазирование вашей ветки поверх последней версии исходного кода проекта. Обратите внимание, что некоторые репозитории могут использовать masterвместо main:
git rebase upstream/main
Возврат и сброс
Вы можете отменить изменения, внесенные вами в данную фиксацию, с помощью revert. Для этого ваше рабочее дерево должно быть чистым:
git revert 1fc6665
Иногда, в том числе после ребейза, нужно сбросить рабочее дерево. Вы можете выполнить сброс до определенного коммита и удалить все изменения с помощью следующей команды:
git reset --hard 1fc6665
Чтобы принудительно отправить последний известный неконфликтующий коммит в исходный репозиторий, вам нужно использовать --force:
Предупреждение : принудительное перемещение в основную (иногда master) ветку часто не одобряется, если для этого нет действительно важной причины. Используйте экономно при работе с собственными репозиториями и старайтесь избегать этого при совместной работе.
git push --force origin main
Чтобы удалить локальные неотслеживаемые файлы и подкаталоги из каталога Git для чистой рабочей ветки, вы можете использовать git clean:
git clean -f -d
Если вам нужно изменить свой локальный репозиторий, чтобы он выглядел как текущая основная ветка основной ветки (то есть слишком много конфликтов), вы можете выполнить полный сброс:
Примечание . При выполнении этой команды ваш локальный репозиторий будет выглядеть точно так же, как вышестоящий. Любые сделанные вами коммиты, которые не были переданы в апстрим , будут уничтожены .
git reset --hard upstream/main
Вывод
В этом руководстве рассматриваются некоторые из наиболее распространенных команд Git, которые вы можете использовать при управлении репозиториями и совместной работе над программным обеспечением.
Существует множество других команд и вариантов, которые могут оказаться полезными при работе с Git. Чтобы узнать больше обо всех доступных параметрах, вы можете запустить следующее, чтобы получить полезную информацию:
git --help
Вы также можете прочитать больше о Git и посмотреть документацию по Git на официальном сайте Git
