HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-21
1 <p>В этой статье мы собрали команды Git для самых разных задач: от настройки локального репозитория до работы с ветками и взаимодействия с GitHub.</p>
1 <p>В этой статье мы собрали команды Git для самых разных задач: от настройки локального репозитория до работы с ветками и взаимодействия с GitHub.</p>
2 <p>Если вы владеете Git, то можете сразу перейти в нужный раздел по ссылке. Новичкам мы рекомендуем читать последовательно: изучить основные Git-команды и попрактиковаться, посмотрев запись вебинара, ссылка на которую будет в конце статьи.</p>
2 <p>Если вы владеете Git, то можете сразу перейти в нужный раздел по ссылке. Новичкам мы рекомендуем читать последовательно: изучить основные Git-команды и попрактиковаться, посмотрев запись вебинара, ссылка на которую будет в конце статьи.</p>
3 <p><strong>Содержание</strong></p>
3 <p><strong>Содержание</strong></p>
4 <ul><li><a>Установка и настройка</a></li>
4 <ul><li><a>Установка и настройка</a></li>
5 </ul><ul><li><a>Установка</a></li>
5 </ul><ul><li><a>Установка</a></li>
6 <li><a>Настройка</a></li>
6 <li><a>Настройка</a></li>
7 </ul><ul><li><a>Создание репозитория</a></li>
7 </ul><ul><li><a>Создание репозитория</a></li>
8 <li><a>Рабочий процесс</a></li>
8 <li><a>Рабочий процесс</a></li>
9 </ul><ul><li><a>git add: добавление файлов в индекс</a></li>
9 </ul><ul><li><a>git add: добавление файлов в индекс</a></li>
10 <li><a>git status: проверка статуса репозитория</a></li>
10 <li><a>git status: проверка статуса репозитория</a></li>
11 <li><a>git commit: добавление файлов в репозиторий</a></li>
11 <li><a>git commit: добавление файлов в репозиторий</a></li>
12 <li><a>git log: просмотр журнала коммитов</a></li>
12 <li><a>git log: просмотр журнала коммитов</a></li>
13 <li><a>git show: просмотр коммита</a></li>
13 <li><a>git show: просмотр коммита</a></li>
14 <li><a>git diff: просмотр изменений до коммита</a></li>
14 <li><a>git diff: просмотр изменений до коммита</a></li>
15 <li><a>git difftool: запуск внешнего инструмента сравнения файлов</a></li>
15 <li><a>git difftool: запуск внешнего инструмента сравнения файлов</a></li>
16 <li><a>git restore: отмена изменений</a></li>
16 <li><a>git restore: отмена изменений</a></li>
17 <li><a>git rm: удаление файлов из индекса</a></li>
17 <li><a>git rm: удаление файлов из индекса</a></li>
18 <li><a>git reset: откат коммита</a></li>
18 <li><a>git reset: откат коммита</a></li>
19 </ul><ul><li><a>Ветвление</a></li>
19 </ul><ul><li><a>Ветвление</a></li>
20 </ul><ul><li><a>git branch &lt;branch_name&gt;: создание новой ветки</a></li>
20 </ul><ul><li><a>git branch &lt;branch_name&gt;: создание новой ветки</a></li>
21 <li><a>git branch: просмотр веток</a></li>
21 <li><a>git branch: просмотр веток</a></li>
22 <li><a>git checkout: переключение между ветками</a></li>
22 <li><a>git checkout: переключение между ветками</a></li>
23 <li><a>git merge: слияние репозиториев</a></li>
23 <li><a>git merge: слияние репозиториев</a></li>
24 <li><a>git branch -d &lt;branch_name&gt;: удаление ветки</a></li>
24 <li><a>git branch -d &lt;branch_name&gt;: удаление ветки</a></li>
25 </ul><ul><li><a>Удалённый репозиторий</a></li>
25 </ul><ul><li><a>Удалённый репозиторий</a></li>
26 </ul><ul><li><a>git remote add origin url: привязка локального и удалённого репозитория</a></li>
26 </ul><ul><li><a>git remote add origin url: привязка локального и удалённого репозитория</a></li>
27 <li><a>git remote: просмотр удалённых репозиториев</a></li>
27 <li><a>git remote: просмотр удалённых репозиториев</a></li>
28 <li><a>git remote - v: просмотр удалённых URL-адресов</a></li>
28 <li><a>git remote - v: просмотр удалённых URL-адресов</a></li>
29 <li><a>git push: отправка изменений в удалённый репозиторий</a></li>
29 <li><a>git push: отправка изменений в удалённый репозиторий</a></li>
30 <li><a>git pull: получение изменений из удалённого репозитория</a></li>
30 <li><a>git pull: получение изменений из удалённого репозитория</a></li>
31 </ul><ul><li><a>Практика по основным командам Git</a></li>
31 </ul><ul><li><a>Практика по основным командам Git</a></li>
32 </ul><p><strong>Эксперт</strong></p>
32 </ul><p><strong>Эксперт</strong></p>
33 <p>Senior Java-разработчик в компании CDEK.</p>
33 <p>Senior Java-разработчик в компании CDEK.</p>
34 <p>Эксперт Skillbox, в прошлом работал над программой курса по Java, был программным директором.</p>
34 <p>Эксперт Skillbox, в прошлом работал над программой курса по Java, был программным директором.</p>
35 <p>Git не входит в стандартный набор программ Windows и macOS. В Linux он встречается, однако не во всех дистрибутивах. Чтобы проверить его наличие, введите в "Терминале" команду:</p>
35 <p>Git не входит в стандартный набор программ Windows и macOS. В Linux он встречается, однако не во всех дистрибутивах. Чтобы проверить его наличие, введите в "Терминале" команду:</p>
36 git --version<p>Если Git установлен, вы увидете номер доступной версии. В противном случае вы увидете сообщение Unsupported command: git. Значит, утилиту нужно будет установить и настроить.</p>
36 git --version<p>Если Git установлен, вы увидете номер доступной версии. В противном случае вы увидете сообщение Unsupported command: git. Значит, утилиту нужно будет установить и настроить.</p>
37 <p>Git можно установить разными способами, и для каждой операционной системы свой порядок действий. На своё усмотрение выберите способ и приступайте.</p>
37 <p>Git можно установить разными способами, и для каждой операционной системы свой порядок действий. На своё усмотрение выберите способ и приступайте.</p>
38 <p><strong>Windows.</strong>Скачайте установщик с <a>git-scm.com</a>. На сайте есть три версии:</p>
38 <p><strong>Windows.</strong>Скачайте установщик с <a>git-scm.com</a>. На сайте есть три версии:</p>
39 <ul><li>стандартная 32-разрядная версия с последней сборкой;</li>
39 <ul><li>стандартная 32-разрядная версия с последней сборкой;</li>
40 <li>автономная версия для установки Git без подключения к интернету;</li>
40 <li>автономная версия для установки Git без подключения к интернету;</li>
41 <li>портативный установщик для загрузки на флешку.</li>
41 <li>портативный установщик для загрузки на флешку.</li>
42 </ul><p>Во время установки следуйте предложенным шагам и оставляйте настройки по умолчанию. Убедитесь, что у вас отмечены следующие пункты:</p>
42 </ul><p>Во время установки следуйте предложенным шагам и оставляйте настройки по умолчанию. Убедитесь, что у вас отмечены следующие пункты:</p>
43 <ul><li>✔️ Use Git Bash as default shell - выберите программу Git Bash;</li>
43 <ul><li>✔️ Use Git Bash as default shell - выберите программу Git Bash;</li>
44 <li>✔️ Integrate Git with the Windows Shell - согласитесь работать с Git через командную строку.</li>
44 <li>✔️ Integrate Git with the Windows Shell - согласитесь работать с Git через командную строку.</li>
45 </ul><p>Также Git на Windows можно установить через менеджер пакетов<a>winget</a>от Microsoft. Для этого откройте оболочку<a>PowerShell</a>и введите команду:</p>
45 </ul><p>Также Git на Windows можно установить через менеджер пакетов<a>winget</a>от Microsoft. Для этого откройте оболочку<a>PowerShell</a>и введите команду:</p>
46 winget install --id Git.Git -e --source winget<p><strong>macOS.</strong>В программе "Терминал" установите менеджер пакетов<a>Homebrew</a>:</p>
46 winget install --id Git.Git -e --source winget<p><strong>macOS.</strong>В программе "Терминал" установите менеджер пакетов<a>Homebrew</a>:</p>
47 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"<p>После этого выполните команду:</p>
47 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"<p>После этого выполните команду:</p>
48 $ brew install git<p>Другие способы установки Git на macOS описаны на сайте<a>git-scm.com</a>.</p>
48 $ brew install git<p>Другие способы установки Git на macOS описаны на сайте<a>git-scm.com</a>.</p>
49 <p><strong>Linux.</strong>Перейдите на <a>git-scm.com</a>и скопируйте в "Терминал" команду для менеджера пакетов вашего<a>Linux-дистрибутива</a>. Вот некоторые варианты:</p>
49 <p><strong>Linux.</strong>Перейдите на <a>git-scm.com</a>и скопируйте в "Терминал" команду для менеджера пакетов вашего<a>Linux-дистрибутива</a>. Вот некоторые варианты:</p>
50 # Для Debian/Ubuntu apt-get install git # Для Fedora yum install git # Для OpenSUSE zypper install git<p>Если у вас macOS или Linux, то после установки Git запустите "Терминал". Если Windows - Git Bash. В этих программах мы будем выполнять все команды.</p>
50 # Для Debian/Ubuntu apt-get install git # Для Fedora yum install git # Для OpenSUSE zypper install git<p>Если у вас macOS или Linux, то после установки Git запустите "Терминал". Если Windows - Git Bash. В этих программах мы будем выполнять все команды.</p>
51 <p>В командной строке укажите имя и почту - это данные, по которым с вами могут связаться другие разработчики для обсуждения коммитов. То есть каждый ваш коммит будет подписан введённым ником и email-адресом.</p>
51 <p>В командной строке укажите имя и почту - это данные, по которым с вами могут связаться другие разработчики для обсуждения коммитов. То есть каждый ваш коммит будет подписан введённым ником и email-адресом.</p>
52 <p>Имя и фамилию нужно писать латиницей, через пробел, в кавычках:</p>
52 <p>Имя и фамилию нужно писать латиницей, через пробел, в кавычках:</p>
53 git config --global user.name "Name Surname"<p>Почту записываем в кавычках:</p>
53 git config --global user.name "Name Surname"<p>Почту записываем в кавычках:</p>
54 - git config --global user.email "your@email"<p>Опционально можно настроить автоматическую поддержку цветов. Эта опция сделает так, чтобы разные типы фалов различались цветами в репозитории:</p>
54 + git config --global user.email "your@email"<p>Опционально можно настроить автоматическую поддержку цветов. Эта опция сделает так, чтобы разные типы файлов различались цветами в репозитории:</p>
55 git config --global color.ui auto<p>Осталось убедиться, что данные добавлены и корректно отображаются:</p>
55 git config --global color.ui auto<p>Осталось убедиться, что данные добавлены и корректно отображаются:</p>
56 git config --list<p>В ответ на запрос командная строка выведет настройки вашего профиля.</p>
56 git config --list<p>В ответ на запрос командная строка выведет настройки вашего профиля.</p>
57 <p>Переместитесь в папку с проектом и подключите Git:</p>
57 <p>Переместитесь в папку с проектом и подключите Git:</p>
58 git init<p>После исполнения команды появится сообщение об инициализации репозитория. Оно означает, что Git начал отслеживать файлы проекта и будет записывать изменения в скрытую папку .git. Если вам понадобится инициализировать новый репозиторий - повторите процедуру. На одном компьютере Git может одновременно управлять неограниченным количеством репозиториев.</p>
58 git init<p>После исполнения команды появится сообщение об инициализации репозитория. Оно означает, что Git начал отслеживать файлы проекта и будет записывать изменения в скрытую папку .git. Если вам понадобится инициализировать новый репозиторий - повторите процедуру. На одном компьютере Git может одновременно управлять неограниченным количеством репозиториев.</p>
59 <p>В командной строке удобно не только работать с Git, но и перемещаться по проекту. Вот список базовых команд, которые могут пригодиться:</p>
59 <p>В командной строке удобно не только работать с Git, но и перемещаться по проекту. Вот список базовых команд, которые могут пригодиться:</p>
60 <ul><li>pwd - просмотр вашего текущего местоположения;</li>
60 <ul><li>pwd - просмотр вашего текущего местоположения;</li>
61 <li>ls - список папок и файлов в текущей директории, где была выполнена команда;</li>
61 <li>ls - список папок и файлов в текущей директории, где была выполнена команда;</li>
62 <li>ls -a - список открытых и скрытых папок и файлов в текущей директории, где была выполнена команда;</li>
62 <li>ls -a - список открытых и скрытых папок и файлов в текущей директории, где была выполнена команда;</li>
63 <li>cd ~ - переход в домашнюю директорию текущего пользователя;</li>
63 <li>cd ~ - переход в домашнюю директорию текущего пользователя;</li>
64 <li>cd .. - переход на один уровень вверх в иерархии файловой системы;</li>
64 <li>cd .. - переход на один уровень вверх в иерархии файловой системы;</li>
65 <li>cd folder_name - переход в выбранную папку;</li>
65 <li>cd folder_name - переход в выбранную папку;</li>
66 <li>mkdir folder_name - создать папку с указанным именем.</li>
66 <li>mkdir folder_name - создать папку с указанным именем.</li>
67 </ul><p>При работе с Git вы будете добавлять файлы в индекс, проверять статус репозитория, создавать коммиты, смотреть историю и откатывать изменения.</p>
67 </ul><p>При работе с Git вы будете добавлять файлы в индекс, проверять статус репозитория, создавать коммиты, смотреть историю и откатывать изменения.</p>
68 <p>Если вы создадите в проекте файл, то Git его посчитает неотслеживаемым (untracked). Такие файлы нельзя перенести в репозиторий без подготовки к сохранению. За подготовку отвечает индекс - промежуточная зона перед репозиторием. Перенести файлы в индекс можно с помощью команды git add.</p>
68 <p>Если вы создадите в проекте файл, то Git его посчитает неотслеживаемым (untracked). Такие файлы нельзя перенести в репозиторий без подготовки к сохранению. За подготовку отвечает индекс - промежуточная зона перед репозиторием. Перенести файлы в индекс можно с помощью команды git add.</p>
69 <p>В индекс можно добавить один файл, несколько или все сразу. После попадания в индекс файлы становятся подготовленными к коммиту (staged):</p>
69 <p>В индекс можно добавить один файл, несколько или все сразу. После попадания в индекс файлы становятся подготовленными к коммиту (staged):</p>
70 # Добавляем в индекс один файл git add file_name # Добавляем в индекс несколько файлов git add file_name_1 file_name_2 file_name_3 # Добавляем в индекс все изменённые файлы git add .<p>У команды git add есть ещё множество вариаций. Например, git add *.js перенесёт в индекс все файлы из текущей папки с расширением .js. Чтобы получить подробную документацию о какой-то команде - вызывайте справку:</p>
70 # Добавляем в индекс один файл git add file_name # Добавляем в индекс несколько файлов git add file_name_1 file_name_2 file_name_3 # Добавляем в индекс все изменённые файлы git add .<p>У команды git add есть ещё множество вариаций. Например, git add *.js перенесёт в индекс все файлы из текущей папки с расширением .js. Чтобы получить подробную документацию о какой-то команде - вызывайте справку:</p>
71 git help command_name<p>Команда git status даёт представление о текущем состоянии репозитория. Она показывает, какие неотслеживаемые файлы попали в проект, какие файлы находятся в индексе и какие сохранённые файлы вы изменили в репозитории.</p>
71 git help command_name<p>Команда git status даёт представление о текущем состоянии репозитория. Она показывает, какие неотслеживаемые файлы попали в проект, какие файлы находятся в индексе и какие сохранённые файлы вы изменили в репозитории.</p>
72 $ git status # Запрашиваем текущее состояние репозитория # Видим файлы, которые находятся в индексе и подготовлены для коммита Changes to be committed: (use "git restore --staged &lt;file&gt;..." to unstage) modified: index.html modified: styles.css # Видим неотслеживаемые файлы, которые только попали в проект Untracked files: (use "git add &lt;file&gt;..." to include in what will be committed) script.js # Файл script.js не отслеживается Git # Видим изменённые файлы репозитория, которые ещё не добавлены в индекс Changes not staged for commit: (use "git add &lt;file&gt;..." to update what will be committed) (use "git restore &lt;file&gt;..." to discard changes in working directory) README.md # Файл README.md был изменён, но не добавлен в индекс<p>Когда все файлы подготовлены к сохранению, их можно перенести из индекса в репозиторий. Для этого нужна команда git commit с опцией -m и сообщением коммита. Сообщение пишется в кавычках и обычно латиницей:</p>
72 $ git status # Запрашиваем текущее состояние репозитория # Видим файлы, которые находятся в индексе и подготовлены для коммита Changes to be committed: (use "git restore --staged &lt;file&gt;..." to unstage) modified: index.html modified: styles.css # Видим неотслеживаемые файлы, которые только попали в проект Untracked files: (use "git add &lt;file&gt;..." to include in what will be committed) script.js # Файл script.js не отслеживается Git # Видим изменённые файлы репозитория, которые ещё не добавлены в индекс Changes not staged for commit: (use "git add &lt;file&gt;..." to update what will be committed) (use "git restore &lt;file&gt;..." to discard changes in working directory) README.md # Файл README.md был изменён, но не добавлен в индекс<p>Когда все файлы подготовлены к сохранению, их можно перенести из индекса в репозиторий. Для этого нужна команда git commit с опцией -m и сообщением коммита. Сообщение пишется в кавычках и обычно латиницей:</p>
73 git commit -m "Commit message"<p>Сообщения обязательны - по ним разработчики ориентируются в проекте. Есть даже специальный документ - "<a>Соглашение о коммитах</a>". В нём разработчики договорились, как правильно добавлять комментарии. Суть в том, чтобы из сообщения коммита было понятно, какие изменения произошли. Вот примеры:</p>
73 git commit -m "Commit message"<p>Сообщения обязательны - по ним разработчики ориентируются в проекте. Есть даже специальный документ - "<a>Соглашение о коммитах</a>". В нём разработчики договорились, как правильно добавлять комментарии. Суть в том, чтобы из сообщения коммита было понятно, какие изменения произошли. Вот примеры:</p>
74 <p>❌ Добавил свой первый коммит.</p>
74 <p>❌ Добавил свой первый коммит.</p>
75 <p>✅ Исправил баг №ХХХХХ.</p>
75 <p>✅ Исправил баг №ХХХХХ.</p>
76 <p>❌ Работал над файлом index.html.</p>
76 <p>❌ Работал над файлом index.html.</p>
77 <p>✅<a>Сверстал header для главной страницы</a>.</p>
77 <p>✅<a>Сверстал header для главной страницы</a>.</p>
78 <p>Если убрать опцию -m, то после нажатия<strong>Enter</strong>вы попадёте в текстовый редактор. Там вам нужно будет написать сообщение, сохранить его и выйти. А в Vim это нереально ?</p>
78 <p>Если убрать опцию -m, то после нажатия<strong>Enter</strong>вы попадёте в текстовый редактор. Там вам нужно будет написать сообщение, сохранить его и выйти. А в Vim это нереально ?</p>
79 <p>Бывает так: вы закоммитили файл и затем снова его изменяете. В этом случае можно делать новый коммит, минуя индекс. Для этого необходима опция -a:</p>
79 <p>Бывает так: вы закоммитили файл и затем снова его изменяете. В этом случае можно делать новый коммит, минуя индекс. Для этого необходима опция -a:</p>
80 git commit -am "Commit message"<p>Другая частая ситуация: вы торопились и ошиблись в сообщении коммита. Можно ввести опцию --amend и перезаписать сообщение последнего коммита:</p>
80 git commit -am "Commit message"<p>Другая частая ситуация: вы торопились и ошиблись в сообщении коммита. Можно ввести опцию --amend и перезаписать сообщение последнего коммита:</p>
81 git commit --amend -m "New commit message"<p>Команда git log показывает историю коммитов в обратном хронологическом порядке. Вы можете посмотреть<a>хеш</a>, сообщение, дату и ник автора коммита.</p>
81 git commit --amend -m "New commit message"<p>Команда git log показывает историю коммитов в обратном хронологическом порядке. Вы можете посмотреть<a>хеш</a>, сообщение, дату и ник автора коммита.</p>
82 $ git log # Запрос на просмотр журнала коммитов # Информация о третьем сделанном коммите commit 3f6f9e1f58e30e0d3a0d0ab764c0b30a5b621d4a # Хеш первого коммита Author: John Doe &lt;johndoe@example.com&gt; # Автор первого коммита Date: Thu Apr 21 10:26:52 2024 +0300 # Дата первого коммита Update README.md # Сообщение первого коммита # Информация о втором сделанном коммите commit acd1e81729dc2ee2dc107ba345fa1ab7e6cfbff9 Author: Jane Smith &lt;janesmith@example.com&gt; Date: Wed Apr 20 16:45:39 2024 +0300 Add new feature # Информация о первом сделанном коммите commit 7df1e8c33b0a617b3a72c785a67e45d0d932a180 Author: John Doe &lt;johndoe@example.com&gt; Date: Mon Apr 18 09:12:21 2024 +0300 Initial commit<p>У команды git log множество опций, от которых будет зависеть отображение журнала. Например, можно в одну строку расположить информацию о каждом коммите. Для этого придётся убрать дату, ник автора и сократить размер хеша:</p>
82 $ git log # Запрос на просмотр журнала коммитов # Информация о третьем сделанном коммите commit 3f6f9e1f58e30e0d3a0d0ab764c0b30a5b621d4a # Хеш первого коммита Author: John Doe &lt;johndoe@example.com&gt; # Автор первого коммита Date: Thu Apr 21 10:26:52 2024 +0300 # Дата первого коммита Update README.md # Сообщение первого коммита # Информация о втором сделанном коммите commit acd1e81729dc2ee2dc107ba345fa1ab7e6cfbff9 Author: Jane Smith &lt;janesmith@example.com&gt; Date: Wed Apr 20 16:45:39 2024 +0300 Add new feature # Информация о первом сделанном коммите commit 7df1e8c33b0a617b3a72c785a67e45d0d932a180 Author: John Doe &lt;johndoe@example.com&gt; Date: Mon Apr 18 09:12:21 2024 +0300 Initial commit<p>У команды git log множество опций, от которых будет зависеть отображение журнала. Например, можно в одну строку расположить информацию о каждом коммите. Для этого придётся убрать дату, ник автора и сократить размер хеша:</p>
83 $ git log --oneline # Запрос на вывод истории коммитов в одну строку 3f6f9e1 Update README.md acd1e81 Add new feature 7df1e8c Initial commit<p>Команда git show выводит информацию об одном коммите. Сообщение делится на два блока: часть с метаданными и список изменений, внесённых в коммит.</p>
83 $ git log --oneline # Запрос на вывод истории коммитов в одну строку 3f6f9e1 Update README.md acd1e81 Add new feature 7df1e8c Initial commit<p>Команда git show выводит информацию об одном коммите. Сообщение делится на два блока: часть с метаданными и список изменений, внесённых в коммит.</p>
84 $ git show abc12345 # Запрос на просмотр коммита с хешем abc12345 # Метаданные commit abc12345 # Хеш коммита Author: John Doe &lt;johndoe@example.com&gt; # Автор коммита Date: Thu Apr 21 10:26:52 2024 +0300 # Дата и время коммита Update README.md # Сообщение коммита # Список изменений в файле README.md diff --git a/README.md b/README.md index abcdef1..1234567 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# My Project # Старое содержимое строки +# My Awesome Project # Новое содержимое строки<p>Если ввести git show без хеша, то выведется содержимое последнего коммита.</p>
84 $ git show abc12345 # Запрос на просмотр коммита с хешем abc12345 # Метаданные commit abc12345 # Хеш коммита Author: John Doe &lt;johndoe@example.com&gt; # Автор коммита Date: Thu Apr 21 10:26:52 2024 +0300 # Дата и время коммита Update README.md # Сообщение коммита # Список изменений в файле README.md diff --git a/README.md b/README.md index abcdef1..1234567 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# My Project # Старое содержимое строки +# My Awesome Project # Новое содержимое строки<p>Если ввести git show без хеша, то выведется содержимое последнего коммита.</p>
85 <p>Команда git diff показывает разницу между последним коммитом и текущим состоянием репозитория. То есть последний коммит сравнивается со всеми неотслеживаемыми файлами, которые ещё не переведены в индекс.</p>
85 <p>Команда git diff показывает разницу между последним коммитом и текущим состоянием репозитория. То есть последний коммит сравнивается со всеми неотслеживаемыми файлами, которые ещё не переведены в индекс.</p>
86 <p>Можно добавить имя файла и сравнить его содержимое с последним коммитом.</p>
86 <p>Можно добавить имя файла и сравнить его содержимое с последним коммитом.</p>
87 <p>Ещё вариант: вместо имени файла можно использовать хеш коммита. Также можно добавить опцию --staged и сравнить версию кода после последнего коммита с отслеживаемым состоянием репозитория - со всеми файлами, которые находятся в индексе.</p>
87 <p>Ещё вариант: вместо имени файла можно использовать хеш коммита. Также можно добавить опцию --staged и сравнить версию кода после последнего коммита с отслеживаемым состоянием репозитория - со всеми файлами, которые находятся в индексе.</p>
88 # Смотрим разницу между последним коммитом и текущим состоянием репозитория git diff # Разница между последним коммитом и текущим состоянием файла git diff file_name # Разница между последним коммитом и коммитом с указанным хешем git diff commit_hash # Разница между последним коммитом и отслеживаемым состоянием репозитория git diff --staged<p>Команда git difftool работает по принципу команды git diff - сравнивает файлы и находит в них различия. Только git diff отображает результат в текстовом виде, а git difftool в графическом: команда запускает внешние программы с визуальными инструментами сравнения файлов. Если хотите попробовать - установите<a>Beyond Compare</a>,<a>vimdiff</a>,<a>Meld</a>или другое похожее приложение. После прочтите<a>документацию</a>по git difftool и попрактикуйтесь отображать данные.</p>
88 # Смотрим разницу между последним коммитом и текущим состоянием репозитория git diff # Разница между последним коммитом и текущим состоянием файла git diff file_name # Разница между последним коммитом и коммитом с указанным хешем git diff commit_hash # Разница между последним коммитом и отслеживаемым состоянием репозитория git diff --staged<p>Команда git difftool работает по принципу команды git diff - сравнивает файлы и находит в них различия. Только git diff отображает результат в текстовом виде, а git difftool в графическом: команда запускает внешние программы с визуальными инструментами сравнения файлов. Если хотите попробовать - установите<a>Beyond Compare</a>,<a>vimdiff</a>,<a>Meld</a>или другое похожее приложение. После прочтите<a>документацию</a>по git difftool и попрактикуйтесь отображать данные.</p>
89 <p>Команда git restore возвращает файл к состоянию последнего коммита. Она отменяет все изменения, если файл не перенесён в индекс. Если файл попал в индекс, то вместе с названием команды нужно использовать опцию --staged.</p>
89 <p>Команда git restore возвращает файл к состоянию последнего коммита. Она отменяет все изменения, если файл не перенесён в индекс. Если файл попал в индекс, то вместе с названием команды нужно использовать опцию --staged.</p>
90 # Вернуть неотслеживаемый файл к состоянию последнего коммита git restore file_name # Вернуть все файлы из индекса к состоянию последнего коммита git restore --staged # Вернуть указанный файл из индекса к состоянию последнего коммита git restore --staged file_name<p>Команда git rm позволяет удалить файл, который по ошибке попал в индекс. После выполнения команды файл пропадёт из индекса и из папки на вашем компьютере, в которой хранится проект. Если вы хотите удалить файл только из индекса, то команду git rm нужно использовать вместе с опцией --cached.</p>
90 # Вернуть неотслеживаемый файл к состоянию последнего коммита git restore file_name # Вернуть все файлы из индекса к состоянию последнего коммита git restore --staged # Вернуть указанный файл из индекса к состоянию последнего коммита git restore --staged file_name<p>Команда git rm позволяет удалить файл, который по ошибке попал в индекс. После выполнения команды файл пропадёт из индекса и из папки на вашем компьютере, в которой хранится проект. Если вы хотите удалить файл только из индекса, то команду git rm нужно использовать вместе с опцией --cached.</p>
91 # Удалить файл из индекса и рабочей директории git rm file_name # Удалить файл из индекса и оставить в папке на компьютере git rm --cached file_name<p>Команда git reset позволяет отменить любое количество сделанных коммитов и вернуть проект к какому-то состоянию в прошлом. Команду нужно выполнять с осторожностью, поскольку она может навсегда переписать историю проекта.</p>
91 # Удалить файл из индекса и рабочей директории git rm file_name # Удалить файл из индекса и оставить в папке на компьютере git rm --cached file_name<p>Команда git reset позволяет отменить любое количество сделанных коммитов и вернуть проект к какому-то состоянию в прошлом. Команду нужно выполнять с осторожностью, поскольку она может навсегда переписать историю проекта.</p>
92 <p>На выбор можно использовать три режима: --soft, --mixed и --hard.</p>
92 <p>На выбор можно использовать три режима: --soft, --mixed и --hard.</p>
93 <p>В режиме --soft проект откатывается к указанному коммиту и переводит все последующие коммиты в индекс. Вы можете сразу сделать новый коммит и перезаписать историю проекта, оставив исходные файлы без изменений.</p>
93 <p>В режиме --soft проект откатывается к указанному коммиту и переводит все последующие коммиты в индекс. Вы можете сразу сделать новый коммит и перезаписать историю проекта, оставив исходные файлы без изменений.</p>
94 <p>В режиме --mixed откаченные файлы попадают в неотслеживаемую зону. Вы можете эти файлы изменить, удалить или вернуть обратно в индекс.</p>
94 <p>В режиме --mixed откаченные файлы попадают в неотслеживаемую зону. Вы можете эти файлы изменить, удалить или вернуть обратно в индекс.</p>
95 <p>В режиме --hard проект откатывается к указанному коммиту и удаляет все последующие коммиты без возможности их восстановления.</p>
95 <p>В режиме --hard проект откатывается к указанному коммиту и удаляет все последующие коммиты без возможности их восстановления.</p>
96 # Откатываемся и переводим последующие коммиты в индекс git reset --soft commit_hash # Откатываемся и переводим последующие коммиты в неотслеживаемую зону git reset --mixed commit_hash # Откатываемся и удаляем все последующие коммиты git reset --hard commit_hash<p>Перед выполнением git reset мы рекомендуем всегда делать резервную копию проекта, на случай непредвиденного удаления файлов.</p>
96 # Откатываемся и переводим последующие коммиты в индекс git reset --soft commit_hash # Откатываемся и переводим последующие коммиты в неотслеживаемую зону git reset --mixed commit_hash # Откатываемся и удаляем все последующие коммиты git reset --hard commit_hash<p>Перед выполнением git reset мы рекомендуем всегда делать резервную копию проекта, на случай непредвиденного удаления файлов.</p>
97 <p>Вся разработка в Git происходит в ветках. Они сохраняют коммиты и организуют их в цепочку: перемещаясь по ветке от одного коммита к другому можно отследить изменения в проекте. При работе с ветками вы будете часто их создавать, просматривать, переименовывать, переключать, объединять и удалять.</p>
97 <p>Вся разработка в Git происходит в ветках. Они сохраняют коммиты и организуют их в цепочку: перемещаясь по ветке от одного коммита к другому можно отследить изменения в проекте. При работе с ветками вы будете часто их создавать, просматривать, переименовывать, переключать, объединять и удалять.</p>
98 <p>После первого коммита Git автоматически создаёт первую ветку. Обычно в ней хранят стабильную версию проекта для пользователей продукта. Под остальные задачи разработчики создают отдельные ветки с помощью команды git branch:</p>
98 <p>После первого коммита Git автоматически создаёт первую ветку. Обычно в ней хранят стабильную версию проекта для пользователей продукта. Под остальные задачи разработчики создают отдельные ветки с помощью команды git branch:</p>
99 git branch branch_name<p>По названию ветки должно быть понятно, что в ней происходит. Например, если в названии упоминается слово bugfix, то ветка предназначена для исправления ошибок. Слово feature указывает на разработку какой-то функции. А вот случайное название test10.24 не значит ничего, и таких названий лучше избегать.</p>
99 git branch branch_name<p>По названию ветки должно быть понятно, что в ней происходит. Например, если в названии упоминается слово bugfix, то ветка предназначена для исправления ошибок. Слово feature указывает на разработку какой-то функции. А вот случайное название test10.24 не значит ничего, и таких названий лучше избегать.</p>
100 <p>Ветку с неудачным названием можно переименовать:</p>
100 <p>Ветку с неудачным названием можно переименовать:</p>
101 git branch -m old_branch_name new_branch_name # old_branch_name - старое имя ветки # new_branch_name - новое имя ветки<p>Команда git branch позволяет получить список всех доступных веток в проекте. Также она проставляет символ звёздочки слева от текущей активной ветки:</p>
101 git branch -m old_branch_name new_branch_name # old_branch_name - старое имя ветки # new_branch_name - новое имя ветки<p>Команда git branch позволяет получить список всех доступных веток в проекте. Также она проставляет символ звёздочки слева от текущей активной ветки:</p>
102 # Запрашиваем список всех доступных веток git branch # Результат вывода bugfix/fix-bug * maine feature/new-feature<p>Команда git checkout позволяет переключиться с одной ветки на другую:</p>
102 # Запрашиваем список всех доступных веток git branch # Результат вывода bugfix/fix-bug * maine feature/new-feature<p>Команда git checkout позволяет переключиться с одной ветки на другую:</p>
103 git checkout branch_name<p>Также можно одной командой создать новую ветку и сразу в неё перейти:</p>
103 git checkout branch_name<p>Также можно одной командой создать новую ветку и сразу в неё перейти:</p>
104 git checkout -b branch_name<p>У команды git checkout есть более современная альтернатива:</p>
104 git checkout -b branch_name<p>У команды git checkout есть более современная альтернатива:</p>
105 git switch branch_name<p>Команда git switch безопасней и больше подходит новичкам. Перед каждым переключением она автоматически проверяет рабочую директорию и не срабатывает, если переход на выбранную ветку может привести к потере данных.</p>
105 git switch branch_name<p>Команда git switch безопасней и больше подходит новичкам. Перед каждым переключением она автоматически проверяет рабочую директорию и не срабатывает, если переход на выбранную ветку может привести к потере данных.</p>
106 <p>Команда git merge позволяет добавить изменения из одной ветки в другую. Такой процесс называется слиянием, и он завершается появлением общего коммита для объединённых веток. По этому коммиту можно отследить историю каждой ветки.</p>
106 <p>Команда git merge позволяет добавить изменения из одной ветки в другую. Такой процесс называется слиянием, и он завершается появлением общего коммита для объединённых веток. По этому коммиту можно отследить историю каждой ветки.</p>
107 # Переключаемся на основную ветку, которая будет принимать изменения git checkout main_branch # Сливаем изменения из второстепенной ветки в основную git merge secondary_branch<p>После слияния второстепенная ветка больше не нужна и мы её можем удалить.</p>
107 # Переключаемся на основную ветку, которая будет принимать изменения git checkout main_branch # Сливаем изменения из второстепенной ветки в основную git merge secondary_branch<p>После слияния второстепенная ветка больше не нужна и мы её можем удалить.</p>
108 # Проверяем текущую ветку git branch # Результат вывода main_branch * secondary_branch # Переключаемся на основную ветку git checkout main_branch # Удаляем второстепенную ветку git branch -d secondary_branch<p>В предыдущих разделах мы использовали Git локально на компьютере. Теперь нам нужна удалённая версия репозитория, которой мы сможем поделиться с другими разработчиками или использовать в качестве резервного хранилища для проекта. Создать удалённый репозиторий можно на разных платформах, среди которых популярны сервисы<a>GitHub</a>и <a>GitLab</a>. Мы будем работать с GitHub.</p>
108 # Проверяем текущую ветку git branch # Результат вывода main_branch * secondary_branch # Переключаемся на основную ветку git checkout main_branch # Удаляем второстепенную ветку git branch -d secondary_branch<p>В предыдущих разделах мы использовали Git локально на компьютере. Теперь нам нужна удалённая версия репозитория, которой мы сможем поделиться с другими разработчиками или использовать в качестве резервного хранилища для проекта. Создать удалённый репозиторий можно на разных платформах, среди которых популярны сервисы<a>GitHub</a>и <a>GitLab</a>. Мы будем работать с GitHub.</p>
109 <p>Для работы с GitHub вам нужно зарегистрироваться и настроить<a>SSH-ключи</a>для безопасного соединения. После можно переходить к удалённому репозиторию.</p>
109 <p>Для работы с GitHub вам нужно зарегистрироваться и настроить<a>SSH-ключи</a>для безопасного соединения. После можно переходить к удалённому репозиторию.</p>
110 <p>С помощью командной строки переместитесь в папку с проектом на своём компьютере. Теперь вы можете выполнить команду git remote add, которая установит связь между вашим локальным и удалённым репозиторием на GitHub.</p>
110 <p>С помощью командной строки переместитесь в папку с проектом на своём компьютере. Теперь вы можете выполнить команду git remote add, которая установит связь между вашим локальным и удалённым репозиторием на GitHub.</p>
111 <p>К команде нужно добавить два параметра: имя вашего удалённого репозитория и его адрес. Адрес вы найдёте на странице своего профиля во вкладке SSH.</p>
111 <p>К команде нужно добавить два параметра: имя вашего удалённого репозитория и его адрес. Адрес вы найдёте на странице своего профиля во вкладке SSH.</p>
112 # Перемещение в папку с проектом cd путь/к/папке/с/проектом # Привязка локального репозитория к удалённому на GitHub git remote add origin git@github.com:ваш_профиль/ваш_репозиторий.git<p>Если вы часто взаимодействуете с GitHub, то с вашим локальным может быть связано множество удалённых репозиториев. Если ввести команду git remote, то можно посмотреть название этих репозиториев и отсортировать все ненужные.</p>
112 # Перемещение в папку с проектом cd путь/к/папке/с/проектом # Привязка локального репозитория к удалённому на GitHub git remote add origin git@github.com:ваш_профиль/ваш_репозиторий.git<p>Если вы часто взаимодействуете с GitHub, то с вашим локальным может быть связано множество удалённых репозиториев. Если ввести команду git remote, то можно посмотреть название этих репозиториев и отсортировать все ненужные.</p>
113 # Запрашиваем список удалённых репозиториев, которые связаны с локальным git remote # Пример вывода: два удалённых репозитория связаны с нашим локальным origin upstream<p>Команда git remote показывает только названия удалённых репозиториев, которые связаны с вашим локальным. К команде можно добавить опцию -v и посмотреть удалённые URL-адреса. По URL-адресам будет видно, какие изменения вы делали.</p>
113 # Запрашиваем список удалённых репозиториев, которые связаны с локальным git remote # Пример вывода: два удалённых репозитория связаны с нашим локальным origin upstream<p>Команда git remote показывает только названия удалённых репозиториев, которые связаны с вашим локальным. К команде можно добавить опцию -v и посмотреть удалённые URL-адреса. По URL-адресам будет видно, какие изменения вы делали.</p>
114 # Запрос списка удалённых репозиториев с URL-адресами git remote -v # Пример вывода с URL-адресами origin https://github.com/user/repo.git (fetch) origin https://github.com/user/repo.git (push) upstream https://github.com/otheruser/repo.git (fetch) upstream https://github.com/otheruser/repo.git (push)<p>Команда git push загружает изменения из локального репозитория в удалённый.</p>
114 # Запрос списка удалённых репозиториев с URL-адресами git remote -v # Пример вывода с URL-адресами origin https://github.com/user/repo.git (fetch) origin https://github.com/user/repo.git (push) upstream https://github.com/otheruser/repo.git (fetch) upstream https://github.com/otheruser/repo.git (push)<p>Команда git push загружает изменения из локального репозитория в удалённый.</p>
115 <p>Во время первой загрузки нужно использовать команду с опцией -u. Это свяжет локальную и удалённую ветки и синхронизирует их для последующих операций. Для второй и всех последующих загрузок опция -u для связанных веток не понадобится.</p>
115 <p>Во время первой загрузки нужно использовать команду с опцией -u. Это свяжет локальную и удалённую ветки и синхронизирует их для последующих операций. Для второй и всех последующих загрузок опция -u для связанных веток не понадобится.</p>
116 # Команда для первой загрузки изменений в удалённый репозиторий: текущая ветка будет связана с веткой main в удалённом репозитории origin git push -u origin main # Команда для второй и последующих загрузок изменений в удалённый репозиторий git push<p>Команда git pull скачивает изменения из удалённого репозитория в локальный.</p>
116 # Команда для первой загрузки изменений в удалённый репозиторий: текущая ветка будет связана с веткой main в удалённом репозитории origin git push -u origin main # Команда для второй и последующих загрузок изменений в удалённый репозиторий git push<p>Команда git pull скачивает изменения из удалённого репозитория в локальный.</p>
117 # Скачиваем изменения из удалённого репозитория и добавляем их в локальную ветку git pull<p>Попрактиковаться можно вместе с экспертами Skillbox.</p>
117 # Скачиваем изменения из удалённого репозитория и добавляем их в локальную ветку git pull<p>Попрактиковаться можно вместе с экспертами Skillbox.</p>
118 <p>Даниил Пилипенко, CEO центра подбора IT-специалистов SymbioWay, провёл вебинар по работе с системой управления версиями Git и её основным командам: git status, git add, git commit, git log, git branch, git clone и другим.</p>
118 <p>Даниил Пилипенко, CEO центра подбора IT-специалистов SymbioWay, провёл вебинар по работе с системой управления версиями Git и её основным командам: git status, git add, git commit, git log, git branch, git clone и другим.</p>
119 Вебинар Skillbox: основные команды для работы с Git и GitHub
119 Вебинар Skillbox: основные команды для работы с Git и GitHub