Новости

Полезные команды Git, которые вам нужно знать

Git Workflow

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

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

Эта статья не только для новичков. Так как эти команды мы используем редко, то всем будет полезно их повторить.

Мы начнём с простых команд, чтобы материал был понятен всем, но в итоге разберём Git Workflow целиком, поэтому подобных проблем при работе у вас больше возникнуть не должно.

Чтобы начать работу с системой контроля версий Git вам необходимо создать репозиторий на GitHub или GitLab.

Необходимо клонировать созданный репозиторий. В результате у вас бедет локальная копия (Local Repository) удалённого репозитория (Remote Repository), как на схеме выше.

git clone https://github.com/<your_user_name>/<repo_name>

Важно понимать, что когда вы работаете над проектом все изменения по-прежнему хранятся только в рабочем каталоге (Working Directory). Чтобы Git начал отслеживать состояние файлов необходимо добавить их в индекс (Index/Staging).

Команда добавляет указанный файл в индекс:

git add <file-name>

Можно сразу добавить все файлы в индекс:

git add .

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

git status

Но все изменения, которые мы сделали по-прежнему хранятся только в рабочем каталоге. Чтобы сохранить изменения в Git, нужно их зафиксировать, создав коммит.

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

git diff

Старайтесь снабжать коммиты информативными комментариями, это поможет вам быстро находить необходимые коммиты.

git commit -m "<comment>"

Посмотреть содержимое последнего коммита

git show HEAD

HEAD — это hash последнего коммита.

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

git log

Команда git log также отображает хэш коммитов. Вы можете использовать их вместе с командами git show и git diff, чтобы получить информацию о любом коммите, а также сравнить два коммита между собой.

Утилита git достаточно информативна, но рекомендую попробовать утилиту tig, работать с ней ещё удобнее.

Теперь наш локальный репозиторий содержит информацию об изменениях, осталось обновить информацию в удалённом репозитории. Сделать это не сложно:

git push

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

git pull

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

Предположим, возникла ситуация, когда в ходе работы над проектом вы поняли, что последние коммиты не нужны, например была допущена ошибка в первом из них. Мы можем указать на какой коммит нужно откатиться и все коммиты, созданные после него будут удалены. Для примера откатимся на 2 коммитов назад:

git reset HEAD~2

Так же можно указать хэш коммита, который однозначно его идентифицирует. Посмотреть хэш коммита можно с помощью команды git log.

git reset <commit_hash>

Учтите, что будут удалены только коммиты, содержимое файлов при этом не измениться. Чтобы удалить эти файлы можно выполнить команду:

git checkout .

Можно также откатить изменения в определенном файле

git checkout <file_name>

Но так как файлы будут удалены безвозвратно, лучше предварительно выполнить команду git status, чтобы убедиться, что эти файлы больше не нужны.

Обратите внимание, что у команды git reset есть три режима работы:

soft — HEAD будет указывать на коммит, который вы указали в команде. При этом индекс не меняется.

mixed (default) — HEAD так же будет указывать на коммит, который вы указали в команде. Но изменения, связанные с удалёнными коммитами, будут удалены из индекса. Если выполнить команду git commit, то ничего не произойдёт.

hard — повторят эффект mixed, но также изменит файлы в вашем рабочем каталоге.

Таким образом вы можете использовать флаг --hard, вместо команды git checkout.

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

git push --force 

Но будьте осторожны при использовании ключа --force!

Если вы не внесёте эти изменения в удаленный репозиторий, они будут снова загружены в локальный репозиторий после выполнения команды git pull.

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

После того как вы внесёте дополнительные изменения в рабочий каталог и добавьте их в раздел проиндексированных файлов с помощью команды git add, потом выполните команду:

git commit --amend

При этом Git откроет редактор, где вы сможете изменить сообщение последнего коммита. Новые изменения будут добавлены в исправленный коммит.

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

git revert <commit_hash>

Команду git revert можно также использовать с HEAD.

Обратите внимание на ещё одну команду git restore, которая помогает отменить незафиксированные локальные изменения. Эту команду можно использовать для отмены действий команды git add, чтобы убрать из индекса файлы, которые вы добавили ранее.

git restore --staged <file> 

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

git restore <file>

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


Надеюсь, это руководство помогло вам разобраться как эффективно работать с версионированием в Git. Это не исчерпывающее руководство, скорее путеводитель по самым популярным командам. Исчерпывающую информацию вы всегда найдёте в официальном руководстве по работе с Git.

Добавить комментарий

Кнопка «Наверх»