Расширенное руководство по Git

Развертывание проекта через удаленный репозиторий позволяет гибко управлять каждым его элементом. Исправления ошибок, обновления функций, удаление файлов, совместная работа, участие в программах с открытым исходным кодом, развертывание кода и многое другое теперь у вас под рукой благодаря глубокому знанию Git.

Итак, вы использовали Git, но хотите узнать больше? Вот еще несколько дополнительных советов по Git, которые упростят управление версиями вашего проекта.

Git Branch

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

Создать ветку Git

Чтобы создать ветку Git, используйте:

 git branch branch_name

Переключиться на ветку Git

Используйте checkout, чтобы переключиться на ветку Git:

 git checkout branch_name

После переключения на ветку вы можете внести изменения с помощью git add –all . Затем зафиксируйте их, используя команду git commit -m "имя фиксации" .

Сравните ветку с мастером

Используйте команду git diff :

 git diff master..branch_name

Чтобы сравнить определенные файлы:

 git diff master..testb -- main.html

Сравнение двух веток аналогично тому, как вы сравниваете ветку с главной:

 git diff branch1..branch2

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

 git diff branch1..branch2 -- main.html

Отправка изменений в удаленную ветку

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

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

Затем вы можете отправить эти изменения в удаленную версию ветки:

 git push origin changes

Слияние удаленного филиала с мастером с помощью запроса на включение

Итак, другой программист проверил изменения в удаленной ветке ( изменения ). Но вы хотите объединить его с основной веткой и отправить вживую.

Помните, что ваша удаленная ветка наследует имя вашей локальной ветки Git ( изменяется ). Вот как объединить изменения:

Переключитесь на главную ветку:

 git checkout master

Потяните за начало или HEAD ветки ( изменений ), чтобы объединить ее с основной веткой:

 git pull origin changes

Отправьте это слияние в основную ветку:

 git push origin master

Вместо этого используйте Git Merge

Чтобы объединить ветку с мастером с помощью команды слияния :

Перенести в основную ветку:

 git checkout master

Сливаем с веткой ( изменения ):

 git merge changes

Затем отправьте слияние в основную ветку:

 git push origin master

Убедитесь, что вы заменили изменения названием вашей ветки.

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

Связанный: Как переименовать ветку в Git

Git Rebase

Если у вас есть несколько веток с устаревшими коммитами, вы можете переустановить или перефокусировать head / refs этих веток, чтобы унаследовать head / refs обновленного.

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

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

Например, предположим, что у вас есть две ветки; branch1 и branch2. Итак, вы какое-то время не вносили никаких изменений в branch1. Но вы постоянно фиксируете изменения в branch2, в том числе и в последнее время.

Итак, вы решили нести branch1 вместе с потоком. Таким образом, переназначение branch1 на branch2 означает, что вы говорите branch1 игнорировать свои предыдущие коммиты и унаследовать недавнюю фиксацию, сделанную в branch2.

Вот как это сделать:

Перейдите в заброшенную ветку (ветка1):

 git checkout branch1

Затем переустановите branch1 на обновленную ветку2:

 git rebase branch2

Git Squash

Git squash позволяет объединить несколько коммитов в один. Это помогает, если вы запускаете git commit несколько раз за одно обновление. Практический пример – это когда каждое исправление ошибки или рефакторинг кода для одной функции имеет отдельную фиксацию.

Но вы, возможно, не захотите подталкивать фиксацию HEAD вместе с сопутствующими, поскольку все они имеют одну и ту же цель. Рекомендуемый подход – объединить их воедино, чтобы избежать путаницы при отслеживании коммитов.

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

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

Запустите git reflog, чтобы просмотреть хэш-код ваших коммитов:

 git reflog

Вот результат в этом случае:

Теперь ваша цель – избавиться от последних пяти коммитов, начиная с первого и заканчивая пятым .

Для этого скопируйте хэш-код фиксации чуть ниже первого исправления ( 0a83962 ). Затем нажмите Q, чтобы выйти из рефлога .

Теперь запустите git rebase –interactive для этого хеша.

 git rebase --interactive 0a83962

Затем Git открывает интерактивный файл перебазирования, который выглядит следующим образом:

Чтобы сжать коммиты, за исключением первого исправления , замените pick на s для каждого из остальных коммитов:

Сохраните и закройте этот файл.

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

Очистите их и введите предпочтительное имя для сжатого коммита:

Сохраните этот файл. Затем закройте его, и вы должны получить сообщение об успешном завершении в вашем терминале.

Примечание . Интерактивный файл может открываться в терминале. Но если вы работаете в Windows, вы можете заставить свой терминал глобально открывать файлы в вашем любимом текстовом редакторе, чтобы упростить сжатие.

Для этого откройте командную строку и запустите:

 git config --global core.editor "'path to choice text editor' -n -w"

Git Fork против Git Clone

Разветвление и клонирование – это два разных термина в Git. Вы не можете форкнуть свой репозиторий, поскольку он уже есть у вас. Однако вы можете форкнуть репозиторий других людей и затем клонировать его.

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

Вот как клонировать удаленный репозиторий на GitHub и инициировать загрузку в локальный каталог:

 git clone https://github.com/username/repository_name.git/

Восстановить файл до состояния по умолчанию

Если вы хотите удалить изменения в файле после последней фиксации, вы можете использовать команду git restore :

 git restore filename

Изменить фиксацию

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

Внесите изменения в забытый файл. Затем используйте git corrective, чтобы просмотреть фиксацию:

 git add file_forgotten
git commit --amend

Файлы Unstage

Вы можете удалить определенные файлы, которые вы подготовили для фиксации, используя команду git rm :

 git rm --cached filename

Также можно удалить сразу несколько файлов:

 git rm --cached file1 file2 file3 file4

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

Связанный: Как очистить Git и удалить неотслеживаемые файлы

Git Reset

Использование git reset полезно, если вы хотите сразу удалить все файлы, которые вы подготовили для фиксации:

 git reset

Однако Git reset HEAD указывает HEAD ветки на конкретную фиксацию в вашем рабочем дереве. Например, если вы еще не отправили текущую фиксацию, вы можете вернуться к недавно отправленной фиксации:

 git reset --soft HEAD~1

Замените –soft на –hard, если вы уже нажали текущую фиксацию:

 git reset --hard HEAD~1

Git Revert

В отличие от команды сброса , git revert поддерживает целостность вашей истории коммитов. Это удобно, если вы хотите изменить фиксацию из-за ошибок или ошибок.

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

Чтобы вернуться к фиксации:

 git revert HEAD~1

Где HEAD ~ 1 указывает на конкретную фиксацию в вашем рабочем дереве.

Удалить отслеживаемый файл или каталог

Вы можете использовать git rm -f для удаления любых отслеживаемых файлов в вашем рабочем дереве. Обратите внимание, однако, что Git не может удалить неотслеживаемые файлы, так как он не кэширует их.

Чтобы удалить подготовленный файл:

 git rm -f filename

Чтобы удалить промежуточную папку:

 git rm -r -f foldername

Git Logging

Чтобы просмотреть журналы и историю коммитов в Git:

 git log

Чтобы регистрировать действия в определенной ветке:

 git log branch_name

Связанный: Как просмотреть историю проекта с помощью журнала git

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

 git reflog

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

 git reflog branch_name

Управляйте версиями проекта как профессионал с помощью Git

Благодаря тому, что Git предлагает множество преимуществ, вы можете управлять выпусками проекта удаленно, не взламывая файлы и папки локально в своей основной ветке. Кроме того, он позволяет легко запускать проекты в команде.

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