Pull to refresh
837.36
OTUS
Цифровые навыки от ведущих экспертов

10 полезных команд Git

Level of difficultyEasy
Reading time6 min
Views12K
Original author: Rabi Siddique


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

Прежде чем приступить к изучению команд, давайте познакомимся с несколькими важными терминами Git. Это поможет вам лучше понять команды и предотвратить путаницу в дальнейшем.

HEAD
HEAD в Git — это специальный указатель/ссылка, который указывает на последний коммит в текущей ветке. Когда вы делаете новый коммит, HEAD перемещается вперёд и указывает на этот новый коммит. Например, если вы находитесь на ветке main и делаете новый коммит, HEAD будет указывать на этот коммит, обозначая, что он является последним в ветке main.

^ (символ каретки)
Символ ^ в Git служит средством навигации по временной шкале проекта. HEAD^ ссылается на коммит, непосредственно предшествующий текущему. Если вы добавляете число после ^, например HEAD^2, он начинает ссылаться на второй коммит, предшествующий текущему коммиту. Короче говоря, символ ^ позволяет перемещаться по истории проекта в обратном направлении, а числовое значение определяет количество коммитов, на которое вы хотите вернуться.

Область подготовленных изменений
Область подготовленных изменений (Staging) — это место, где собираются изменения, которые вы хотите включить в следующий коммит. Она позволяет тщательно следить за коммитами, тем самым облегчая просмотр, упорядочивание и доработку изменений. Используя область подготовленных изменений, вы контролируете, что будет включено в коммит. Для добавления изменений в будущий коммит используется команда git add, что сродни заявлению: «Я хочу, чтобы эти изменения стали частью моего следующего коммита».
Теперь перейдём непосредственно к командам.



Добавление и коммит нескольких файлов


Обычно в Git мы используем команду git add *, чтобы подготовить все изменённые файлы для последующего коммита. Чтобы закоммитить эти изменения, используется команда git commit -m "commitMessage". Однако существует более удобная команда, которая выполняет обе задачи за один шаг:

git commit -am "commitMessage"

Флаг -am позволяет не только подготовить эти изменения, но и закоммитить их одной эффективной операцией.

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


Как и в предыдущем случае, есть команда, которая объединяет функциональность этих двух команд. Вместо того, чтобы использовать две отдельные команды — git branch branchName для создания ветки и git checkout branchName для переключения на неё — обе задачи можно выполнить за один шаг с помощью следующей команды:

git checkout -b branchName

Флаг -b в команде git checkout позволяет не только создать новую ветку, но и сразу же переключить вас на неё.

Удаление Git-ветки


Чтобы удалить ветку в Git, можно использовать команду git branch -d или git branch -D. Опция -d предназначена для безопасного удаления: удаление ветки произойдёт только в том случае, если было проведено слияние (merge) с текущей веткой. Опция -D предназначена для принудительного удаления, при котором ветка будет удалена независимо от того, полностью она слилась или нет. Вот команды:

Безопасное удаление (проверяет слияние):

git branch -d branchName

Принудительное удаление (не проверяет слияние):

git branch -D branchName


Переименование Git-ветки


Чтобы переименовать ветку, можно использовать команду git branch -m, за которой следует текущее имя ветки и новое желаемое имя. Например:

git branch -m oldBranch newBranch

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

git branch -m newBranchName

Здесь вам не нужно указывать старое имя ветки, потому что Git предположит, что вы хотите переименовать текущую ветку.

Удаление определённого файла


Когда-нибудь вам понадобится удалить определённый файл из области подготовки, что позволит внести дополнительные изменения перед коммитом. Для этого используйте команду:

git reset filename

Это удалит файл из области подготовки файлов, сохранив при этом изменения.

Отмена изменений в определённом файле


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

git checkout -- filename

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

Обновление последнего коммита


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

git commit --amend -m 'message'

Эта команда изменяет последний коммит. Это объединяет все новые изменения в области подготовки (добавленные с помощью git add) с новым комментарием, чтобы создать обновлённый коммит.

Следует помнить, что если вы уже отправили коммит в удалённый репозиторий, то для обновления удалённой ветки вам нужно будет принудительно отправить изменения с помощью git push --force. Потому что стандартная команда git push добавляет новый коммит в ваш удалённый репозиторий, а не изменяет последний коммит.

Хранение отложенных изменений (stashing)


Представьте, что вы работаете над двумя разными ветками, A и B. Во время внесения изменений в ветку A ваша команда просит вас исправить баг в ветке B. Когда вы пытаетесь переключиться на ветку B с помощью git checkout B, Git не дает этого сделать, выдавая ошибку:


Невозможно переключить ветку

Можно закоммитить изменения, как предлагает сообщение об ошибке. Но это скорее фиксированная точка во времени, а не постоянная работа. Для хранения отложенных изменений используем команду git stash, которая приведёт к тому, что отложенные изменения будут сохранены.

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

Чтобы повторно применить записанные изменения в ветке, можно использовать git stash apply или git stash pop. Обе команды восстанавливают последние отложенные изменения. Команда stash apply просто восстанавливает изменения, а pop восстанавливает изменения и удаляет их из хранилища (stash). Подробнее о хранении отложенных изменений можно прочитать здесь.

Откат изменений в коммитах


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

git revert commitHash

Это безопасный и недеструктивный способ исправить ошибки или нежелательные изменения в проекте.

Допустим, у вас есть серия коммитов:
  • Коммит A
  • Коммит B (здесь внесены нежелательные изменения)
  • Коммит C
  • Коммит D

Чтобы отменить последствия коммита B, нужно выполнить команду:

git revert commitHashOfB

Git создаст новый коммит, назовём его коммит E, который отменяет изменения, внесённые коммитом B. Коммит E станет последним коммитом в вашей ветке, и проект теперь отражает состояние, в котором он находился бы, если бы коммита B не было.

Если вам интересно, как получить хэш коммита, то это можно сделать с помощью команды git reflog. На скриншоте ниже выделенные части представляют собой хэши коммитов, которые можно легко скопировать:


Хэши коммитов

Сброс коммитов


Предположим, вы сделали коммит в своём проекте. Однако после проверки вы понимаете, что вам нужно скорректировать или полностью отменить последний коммит. Для таких случаев Git предоставляет следующие команды:

Soft reset
git reset --soft HEAD^

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

Mixed reset
git reset --mixed HEAD^

Это поведение по умолчанию, когда вы используете git reset HEAD^ без указания --soft или --hard. Он сбрасывает последний коммит и удаляет изменения из области подготовки. Однако эти изменения остаются в рабочей директории. Это полезно, когда вы хотите отменить последий коммит и внести изменения с нуля, сохранив изменения в рабочей директории перед повторным коммитом.

Hard reset
git reset --hard HEAD^

Напоследок давайте поговорим о команде git reset --hard HEAD^. Она полностью стирает последний коммит вместе со всеми связанными с ним изменениями из вашей истории Git. Когда вы используете флаг --hard, пути назад уже не будет. Поэтому используйте его с особой осторожностью, только если хотите навсегда удалить последний коммит и все его изменения.

Tags:
Hubs:
Total votes 31: ↑20 and ↓11+14
Comments9

Articles

Information

Website
otus.ru
Registered
Founded
Employees
101–200 employees
Location
Россия
Representative
OTUS