Git и GitHub — это самые фундаментальные вещи, которые должен знать каждый инженер-программист. Эти инструменты являются неотъемлемой частью повседневной жизни разработчика,
поскольку мы взаимодействуем с ними ежедневно. Владение Git не только упрощает вашу жизнь, но и значительно повышает производительность. В этой статье мы рассмотрим набор команд, которые повысят вашу производительность. По мере того, как вы будете лучше владеть этими командами, вы сэкономите драгоценное время и станете более эффективным инженером-программистом.
Словарь Git
Теперь, прежде чем мы углубимся в изучение команд Git одну за другой, давайте познакомимся с некоторыми основными терминами Git. Это не только поможет вам лучше понять команды, но и предотвратит путаницу в будущем, когда эти термины будут использоваться в дальнейшей части этого блога.
ГОЛОВА
В Git есть специальный указатель/ссылка, который всегда указывает на последний коммит в текущей ветке. Когда вы создаете новую фиксацию, двигайтесь вперед, чтобы указать на эту новую фиксацию. Например, если вы находитесь в ветке и делаете новый коммит, теперь будет указывать на этот новый коммит, указывая, что он самый последний в ветке. HEAD HEAD main HEAD main
^ (символ каретки):
Символ в Git служит средством навигации по исторической временной шкале проекта. Когда вы используете , он ссылается на коммит, непосредственно предшествующий текущему. Если вы добавите число, следующее за , например, , оно ссылается на второй коммит, предшествующий текущему коммиту. Короче говоря, символ позволяет вам перемещаться назад по истории вашего проекта, в то время как числовое значение позволяет вам точно определить количество коммитов, которые вы хотите вернуть. ^ HEAD^ ^ HEAD^2 ^
Инсценировка
Промежуточное хранение — это место, где вы собираете изменения, которые хотите включить в свой следующий коммит. Промежуточное хранение позволяет тщательно отбирать коммиты, упрощая просмотр, организацию и уточнение изменений. С помощью промежуточного хранения у вас есть контроль над тем, что будет включено в ваш коммит. Чтобы проиндексировать изменения, вы используете команду, которая похожа на объявление: «Я хочу, чтобы эти изменения были частью моего следующего коммита». git add
Теперь давайте рассмотрим 10 команд Git одну за другой.
1-Добавление и фиксация файлов вместе
Как правило, в Git мы используем команду для проиндексирования всех измененных файлов для последующего коммита. После этого мы используем команду для фиксации этих изменений. Однако существует более оптимизированная команда, которая выполняет обе задачи за один шаг: git add *git commit -m "commitMessage"
git commit -am "commitMessage"
Флаг позволяет нам не только проиндексировать эти изменения, но и зафиксировать их в одной эффективной операции. -am
2-Создание и переключение на ветку Git
Как и в предыдущем сценарии, есть еще одна команда, которая сочетает в себе функциональность двух команд. Вместо того, чтобы использовать две отдельные команды для создания ветви и последующего переключения на нее, вы можете выполнить обе задачи за один шаг с помощью следующей команды: git branch branchNamegit checkout branchName
git checkout -b branchName
Флаг с командой позволяет нам не только создать новую ветку, но и сразу переключить вас на нее. -bgit checkout
3-Удаление ветки Git
Чтобы удалить ветку в Git, можно использовать команду or. Опция предназначена для безопасного удаления, при котором ветвь будет удалена только в том случае, если она была полностью объединена с текущей ветвью. Это вариант принудительного удаления, которое удалит ветвь независимо от того, полностью ли она объединена или нет. Вот команды: git branch -dgit branch -D-d-D
Безопасное удаление (проверка на слияние):
git branch -d branchName
Принудительное удаление (не проверяет слияние):
git branch -D branchName
4-Переименование ветки Git
Чтобы переименовать ветвь, можно использовать команду, за которой следует имя текущей ветви и новое требуемое имя ветви. Например, если вы хотите переименовать ветку, вызванную в , вы должны выполнить: git branch -moldBranchnewBranch
git branch -m oldBranch newBranch
Однако, если вы хотите переименовать текущую ветку, в которой вы работаете прямо сейчас, без явного указания старого имени, вы можете использовать следующую команду:
git branch -m newBranchName
Здесь вам не нужно указывать имя старой ветки, потому что Git будет считать, что вы хотите переименовать текущую ветку в новое имя.
5-Отмена индекса определенного файла
Иногда вы можете захотеть удалить определенный файл из индексированной области, что позволит вам внести дополнительные изменения перед фиксацией. Использование:
git reset filename
При этом этот файл будет удален из индекса, но изменения останутся нетронутыми.
6-Отмена изменений в определенном файле
Если вы хотите полностью отменить изменения, внесенные в определенный файл, и вернуть его в последнее зафиксированное состояние, используйте:
git checkout -- filename
Эта команда гарантирует, что файл вернется в предыдущее состояние, отменив все недавние изменения. Это полезный способ начать работу с конкретным файлом заново, не влияя на остальные изменения.
7-Обновление последнего коммита Git
Представьте, что вы только что сделали коммит в репозитории Git, но затем понимаете, что забыли включить изменение в этот коммит, или, возможно, вы хотите исправить само сообщение коммита. Вы же не хотите создавать совершенно новый коммит для этого небольшого изменения. Вместо этого вы хотите добавить его к предыдущему коммиту. Здесь вы можете использовать команду:
git commit --amend -m 'message'
Эта команда изменяет последний сделанный вами коммит. Он объединяет все проиндексированные изменения (те, которые вы добавили с помощью ) с вашим новым комментарием для создания обновленного коммита. git add
Следует помнить, что если вы уже отправили коммит в удаленный репозиторий, вам нужно будет принудительно отправить изменения, используя для обновления удаленной ветки. Потому что стандартная операция добавляет новый коммит в удаленный репозиторий, а не изменяет последний коммит. git push --forcegit push
8-Изменения в тайнике
Представьте, что вы работаете над двумя разными ветвями, А и Б. При внесении изменений в ветку А ваша команда просит вас исправить ошибку в ветке Б. Когда вы пытаетесь переключиться на ветку B с помощью , Git предотвращает это, выводя ошибку: git checkout B
Мы можем зафиксировать наши изменения, как указано в сообщении об ошибке. Но фиксация больше похожа на фиксированный момент времени, а не на непрерывную работу. Здесь мы можем применить второе предложение сообщения об ошибке и использовать функцию скрытия. Мы можем использовать эту команду для сохранения наших изменений:
git stash
git stash Временно сохраняет изменения, которые вы не готовы зафиксировать, позволяя переключаться между ветвями или работать над другими задачами, не фиксируя незавершенную работу.
Чтобы повторно применить спрятанные изменения в нашей ветке, вы можете использовать или . Обе команды восстанавливают последние сохраненные изменения. Применение припрятания просто восстанавливает изменения, в то время как извлечение восстанавливает изменения и удаляет их из тайника. Подробнее о спрятании можно прочитать здесь. git stash applygit stash pop
9-Отмена коммитов Git
Представьте, что вы работаете над проектом Git и обнаруживаете, что определенный коммит внес некоторые нежелательные изменения. Вам нужно отменить эти изменения, не стирая коммит из истории. Вы можете использовать следующую команду, чтобы отменить этот конкретный коммит:
git revert commitHash
Это безопасный и неразрушающий способ исправления ошибок или нежелательных изменений в вашем проекте.
Например, предположим, что у вас есть серия коммитов:
- Фиксация A
- Коммит B (нежелательные изменения, внесенные здесь)
- Коммит C
- Коммит D
Чтобы обратить вспять действие коммита B, выполните следующую команду:
git revert commitHashOfB
Git создаст новый коммит, назовем его Commit E, который сводит на нет изменения, внесенные коммитом B. Коммит E становится последним коммитом в вашей ветке, и проект теперь отражает состояние, в котором он был бы, если бы коммит B никогда не произошел.
Если вы задаетесь вопросом, как получить хэш коммита, это легко сделать с помощью . На скриншоте ниже выделенные части представляют собой хэши коммитов, которые можно легко скопировать: git reflog
10-Сброс коммитов Git
Предположим, что вы внесли коммит в свой проект. Однако при осмотре вы понимаете, что вам нужно скорректировать или полностью отменить последний коммит. Для такого сценария Git предоставляет следующие мощные команды:
Программный сброс
git reset --soft HEAD^
При использовании , выполняется программный сброс. Эта команда позволяет выполнить откат к последнему коммиту, сохранив при этом все изменения в индексе. Проще говоря, вы можете легко отменить фиксацию, сохранив изменения в коде, используя эту команду. Это удобно, когда вам нужно пересмотреть последний коммит, возможно, чтобы добавить больше изменений перед повторным коммитом. git reset --soft HEAD^
Смешанный сброс
git reset --mixed HEAD^
Это поведение по умолчанию, когда вы используете без указания или . Он отменяет фиксацию последнего коммита и удаляет его изменения из проиндексированной области. Тем не менее, он сохраняет эти изменения в вашем рабочем каталоге. Это полезно, когда вы хотите отменить фиксацию последнего коммита и внести изменения с нуля, сохраняя изменения в рабочем каталоге перед повторной фиксацией. git reset HEAD^--soft--hard
Аппаратный сброс
git reset --hard HEAD^
Теперь давайте поговорим о . Он полностью удаляет последний коммит вместе со всеми связанными с ним изменениями из истории Git. Когда вы используете флаг, пути назад нет. Поэтому используйте это с особой осторожностью, если вы хотите навсегда отменить последний коммит и все его изменения. git reset --hard HEAD^--hard
Спасибо, что прочитали. Я надеюсь, что этот пост будет полезен, и вы узнали несколько новых команд. Если у вас есть дополнительные вопросы, не стесняйтесь обращаться к нам. Не стесняйтесь делиться любыми командами Git, которые вы обычно используете в своей повседневной жизни и считаете очень удобными. :)