Кратко
СкопированоGit CLI — это консольный интерфейс для Git, который выполняется в терминале. На своих компьютерах разработчики часто используют графические интерфейсы, чтобы работать с репозиторием более комфортно. Но уметь пользоваться Git CLI все равно важно. Например, на серверах зачастую нет графического интерфейса, и пользователи вынуждены использовать консольные приложения. Git CLI — это общий для всех разработчиков инструмент, он есть почти для каждой операционной системы компьютера.
При работе над проектом разработчики обычно следуют примерно одному и тому же сценарию — скачивают себе удалённый репозиторий, создают отдельную ветку для своих правок, изменяют код или пишут новый, добавляют изменённые файлы к списку отслеживаемых изменений, создают коммит и отправляют всю ветку обратно, чтобы другие программисты могли провести код-ревью. После успешного код-ревью ветка разработчика сливается с основной веткой. На этом разработку по конкретной задаче можно считать законченной, а ветку разработчика можно удалить.
Как пользоваться
СкопированоСкачивание удалённого репозитория
СкопированоУдалённый репозиторий — не самый удачный перевод на русский английского remote repository
. Он значит, что репозиторий находится на удалении от вас — не на вашем компьютере, а не то, что ваш код уничтожен.
Обычно, при разработке программы есть сервер, где хранится оригинал исходного кода. Все разработчики копируют этот репозиторий на свой локальный компьютер. После разработки какой-то функциональности изменения отправляются обратно — из локального репозитория разработчика в удалённый.
В первый раз, чтобы скачать весь удалённый репозиторий на свой компьютер, его нужно клонировать. Команда git clone
создаст полную копию локально, в которую можно будет вносить изменения.
git clone git@remote_repo_address
git clone git@remote_repo_address
Со временем, в удалённом репозитории могут появляться новые изменения, которые необходимо подтягивать в локальный репозиторий. Получить все изменения из удалённого репозитория можно командой:
git pull --all
git pull --all
Создание ветки
СкопированоПри работе в команде, разработчики делают задачи параллельно. Чтобы в будущем возникло минимальное число конфликтов в исходном коде, используют ветки.
Конфликт — это ситуация, когда один и тот же код изменили два разных разработчика. В такой ситуации нельзя автоматически решить, чьи правки важнее, и приходится разбирать каждый случай вручную.
Новую ветку можно создать от текущей через Git CLI:
git branch new-user-profile
git branch new-user-profile
Обычно после создания ветки, её сразу делают активной, для этого используется команда:
git switch new-user-profile
git switch new-user-profile
Для удобства можно использовать параметр, с которым команда сразу создаст новую ветку и сделает её активной: git switch
Новая ветка будет включать историю той ветки, от которой она отведена. При этом коммиты в родительской ветке, созданные после отведения дочерней, уже не попадут в историю дочерней. Точно так же и коммиты из дочерней ветки не попадут ни в какую другую, пока разработчик явным образом их туда не поместит.
Можно произвольно переключаться между ветками с помощью команды git switch
.
git switch maingit switch new-user-profile
git switch main git switch new-user-profile
Использование checkout
похоже на switch
.
Для создания и переключения на ветку:
git branch new-user-profilegit checkout new-user-profile
git branch new-user-profile git checkout new-user-profile
Или сразу создать новую ветку и сделать её активной
git checkout -b new-user-profile
git checkout -b new-user-profile
Переключение между ветками происходит аналогично:
git checkout maingit checkout new-user-profile
git checkout main git checkout new-user-profile
Проверка текущего статуса репозитория
СкопированоЧтобы посмотреть, какие файлы были изменены, созданы или удалены, нужно проверить статус репозитория:
git status
git status
Эта команда помогает понять, что произошло в репозитории со времени последнего коммита, какие файлы отслеживаются, и решить, что делать дальше.
Отслеживание изменений
СкопированоПо умолчанию изменения в новых файлах не отслеживаются. Чтобы Git начал это делать, нужно добавить их к списку отслеживания. Для этого в Git CLI используется команда git add
:
git add filename.js
git add filename.js
Использовать команду можно не только для отдельного файла, но и для целой директории с файлами. Например, чтобы добавить все файлы в текущей директории, можно сделать так:
git add .
git add .
Если вы уверены, что хотите добавить все новые и изменившиеся файлы, то воспользуйтесь параметром -
для команды git add
.
Коммит
СкопированоКоммит — это фиксация того состояния вашего кода, которое вы хотите оставить в истории вашего проекта.
Всегда создавайте коммит после внесения изменений в код проекта и давайте ему осмысленный комментарий. В Git CLI для этого используется команда:
git commit
git commit
Она создаст коммит, в который войдут все изменения, добавленные к отслеживанию. После вызова откроется текстовый редактор, куда следует ввести комментарий к коммиту.
Если комментарий к коммиту короткий, то его можно передавать через аргумент: git commit
Отправка в удалённый репозиторий
СкопированоЧтобы отправить свои изменения в удалённый репозиторий, нужно сделать коммит в конкретной ветке и выполнить команду:
git push
git push
Если такой ветки ещё не существует в удалённом репозитории, Git CLI посоветует создать её и подскажет команду.
Слияние изменений
СкопированоЧасто случается так, что за время разработки какой-то функциональности в дочерней ветке, в родительскую ветку добавляется много новых коммитов, и хочется добавить их и в дочернюю ветку. Для этого нужно провести слияние родительской ветки в дочернюю.
С другой стороны, после окончания разработки функциональности в дочерней ветке, нужно отправить изменения в родительскую. Для этого тоже нужно провести слияния, но уже в обратную сторону — из дочерней ветки в родительскую.
Чтобы слить любую ветку в текущую активную ветку, нужно выполнить следующую команду:
git merge branch_name
git merge branch_name
Удаление ветки
СкопированоПосле того как изменения из ветки разработчика попали в основную ветку (master
или main
), ветку разработчика нужно удалить. Это можно сделать консольной командой:
git branch -d branch_name
git branch -d branch_name
На практике
Скопированосоветует Скопировано
Изменение регистра при переименовывании файлов
СкопированоУ Git есть неочевидная логика — он не считает изменением смену регистра в названиях файлов и директорий. Например, если переименовать директорию
в git
, то коммит будет пуст, так как кроме регистра ничего не изменилось.
Чтобы засчитались изменения, должна измениться длина названия. Например:
- сначала переименовать из
вGit - CLI git
;- cli1 - создать коммит;
- переименовать из
git
в- cli1 git
;- cli - создать ещё один коммит.
Есть вариант и без дополнительного коммита:
git mv Git-CLI tmpgit mv tmp git-cli
git mv Git-CLI tmp git mv tmp git-cli
советует Скопировано
.gitignore
СкопированоВо многих проектах есть целые папки, которые не стоит хранить в Git-репозитории:
- папку
node
не добавляют в репозиторий, ведь зависимости можно установить через пакетный менеджер в любой момент;_ modules - результат работы сборщика тоже обычно держат вне репозитория, так как эти файлы не являются исходным кодом;
- файлы, которые создаёт среда разработки (например,
.idea
); - любые секретные данные (пароли и ключи доступа).
Чтобы Git никогда не отслеживал изменения в таких директориях, нужно создать файл .gitignore
. В файле перечисляют все файлы и папки, которые следует игнорировать.
Типичный .gitignore
выглядит примерно так:
node_modules build .idea
Графические клиенты Git
СкопированоНесмотря на важность умения использовать консольный интерфейс Git, многие разработчики в повседневной жизни используют графические интерфейсы, которые помогают наглядно следить за репозиторием, создавать ветки и коммиты.
Вот несколько красивых и простых клиентов:
Бесплатные
- GitKraken для Windows, macOS и Linux;
- Sourcetree для Windows и macOS;
- GitHub Desktop для Windows и macOS.
Платные
- Tower для Windows и macOS;
- Fork для Windows и macOS;
- Sublime Merge для Windows, macOS и Linux.