Git Bash это окно с командной оболочкой bash, которое ставится в Windows вместе с пакетом Git for Windows. В нём работают команды системы контроля версий git и привычные по Linux инструменты Unix: ls, cd, cat, grep, ssh. Отдельно Git Bash не скачивают, он часть пакета: установщик берут на странице загрузки сайта проекта gitforwindows.org.
Команды из примеров прогнаны в Git for Windows 2.56.0(2) на Windows 10, вывод в блоках взят из этого прогона.
- Что такое Git Bash и что входит в пакет
- Установка Git for Windows: на каких шагах задержаться
- Первоначальная настройка: git config
- Первый репозиторий: git init, add, commit
- Ветки и слияние
- Удалённый репозиторий: push, clone, pull и SSH-ключ
- Git Bash, PowerShell и cmd: в чём разница
- Частые вопросы о Git Bash
- Почему интерактивный Python в Git Bash не запускается или зависает?
- Как обновить Git Bash?
- Нужен ли Git Bash, если git работает в PowerShell?
- Как открыть Git Bash сразу в папке проекта?
Что такое Git Bash и что входит в пакет
Git for Windows построен на проекте MSYS2. Из него в пакет приходят слой эмуляции POSIX (среда выполнения MSYS2), оболочка bash и набор утилит Unix. Git Bash это bash из этой среды, открытый в окне терминала MinTTY. Команда git в нём ведёт себя так же, как в Linux.
| Что внутри | Зачем | Версия в проверенной сборке |
|---|---|---|
| bash | командная оболочка | 5.3.15 |
| MinTTY | окно терминала, в котором открывается Git Bash | 3.8.3 |
| среда выполнения MSYS2 | слой эмуляции POSIX, на нём работают bash и утилиты | собрана на Cygwin 3.6.10 |
| git | сама система контроля версий | 2.56.0 |
| OpenSSH | ssh, ssh-keygen для работы с GitHub и серверами | 10.5p1 |
| vim и nano | текстовые редакторы в консоли | 9.2 и 9.2 |
| Git Credential Manager | хранит логины и токены для GitHub, Azure Repos и других сервисов | включён по умолчанию (нужен .NET Framework 4.7.2 или новее) |
Каталог /usr/bin нашей установки содержит 366 файлов: ls, cat, grep, find, sed, awk, tar, less, touch и другие. Кроме Git Bash, установщик кладёт в меню «Пуск» ярлыки Git CMD и Git GUI. Git GUI это графический интерфейс почти ко всем командам git, со встроенным просмотром различий между версиями файлов.
В версии 2.56 пакет перешёл со сборки MINGW64 на UCRT64. Приглашение Git Bash показывает имя среды, и после имени компьютера теперь стоит UCRT64, а на старых скриншотах в инструкциях видно MINGW64. Файла /mingw64/bin/git.exe в новой версии нет. Если он прописан в каком-то скрипте, замените путь на /cmd/git.exe: этот путь в следующих версиях останется прежним.
Установка Git for Windows: на каких шагах задержаться
Установщик на английском. На большинстве экранов можно оставить вариант по умолчанию. Экраны, где выбор важен для ежедневной работы:
| Экран | По умолчанию | Что выбрать |
|---|---|---|
| Select Components | «Open Git Bash here» и «Open Git GUI here» в группе «Windows Explorer integration» включены, «Add a Git Bash Profile to Windows Terminal» снят | первые два оставить: они добавляют в контекстное меню папки команды открыть Git Bash или Git GUI; третий отметить, если пользуетесь Windows Terminal, там появится профиль Git Bash |
| Choosing the default editor used by Git | Vim | VS Code («Use Visual Studio Code as Git’s default editor»), а если графических редакторов на компьютере нет, nano |
| Adjusting the name of the initial branch in new repositories | «Let Git decide», первая ветка называется master | «Override the default branch name for new repositories», в поле уже вписано main |
| Adjusting your PATH environment | «Git from the command line and also from 3rd-party software» | оставить как есть |
| Configuring the line ending conversions | «Checkout Windows-style, commit Unix-style line endings», это core.autocrlf=true | оставить как есть |
| Configuring the terminal emulator to use with Git Bash | «Use MinTTY (the default terminal of MSYS2)» | MinTTY; «Use Windows’ default console window», если часто запускаете интерактивный Python или Node.js |
Про редактор сам установщик в подсказке пишет, что Vim остаётся редактором по умолчанию только по историческим причинам, и советует выбрать современный графический редактор, а при их отсутствии рекомендует nano. Этому совету лучше последовать: в Vim без подготовки даже сообщение коммита не набрать, сначала нужно перейти в режим вставки.
Имя ветки main удобнее потому, что GitHub называет так основную ветку новых репозиториев. На старые репозитории эта настройка не действует.
С рекомендуемым вариантом PATH git будет работать в Git Bash, командной строке, PowerShell и в сторонних программах, которые ищут его в PATH. Вариант «Use Git from Git Bash only» не трогает PATH, и git запустится только в Git Bash. Третий вариант добавляет в PATH все утилиты Unix и, как предупреждает установщик, подменяет команды операционной системы find и sort, поэтому третий вариант лучше не выбирать.
Настройка окончаний строк значит, что при извлечении файлов git ставит окончания CRLF, а при коммите приводит их к LF. Из-за неё при git add появляется предупреждение LF will be replaced by CRLF the next time Git touches it, ниже на первом коммите оно видно в выводе.
Остальные экраны (поведение git pull, помощник для паролей, дополнительные опции) можно пройти как есть. На экране «Choose a credential helper» выбран Git Credential Manager, если на компьютере есть .NET Framework 4.7.2 или новее; без него этот пункт недоступен.

Первоначальная настройка: git config
Git Bash открывается из меню «Пуск» или правой кнопкой мыши по папке в проводнике, пунктом «Open Git Bash here». Ярлык из «Пуска» откроет окно в домашней папке, пункт в проводнике сразу в выбранной.
Для начала работы проверьте версию и укажите имя пользователя и электронную почту. Git записывает их в каждый коммит, и у уже сделанных коммитов автора так просто не поменять:
git --version
git config --global user.name "Ivan Petrov"
git config --global user.email "ivan@example.com"
git config --global init.defaultBranch main
git config --global --list
git version 2.56.0.windows.2
user.name=Ivan Petrov
user.email=ivan@example.com
init.defaultbranch=main
Параметр --global пишет настройки в файл ~/.gitconfig, то есть в C:\Users\<имя>\.gitconfig, и они действуют на все репозитории пользователя. Строка с init.defaultBranch нужна, если в установщике осталось «Let Git decide»: тогда он записал master в системные настройки, и без неё git init создаст ветку master. Откуда взялось каждое значение, покажет git config --list --show-origin: рядом с настройкой будет путь к файлу.
Почту указывайте ту же, что добавлена в аккаунт GitHub: по ней сервис привязывает коммиты к профилю и показывает их в графике активности.
## Пути в Git Bash: /c/ вместо C:\
Диск C: в Git Bash выглядит как каталог /c/, а разделитель в пути прямой слэш: C:\Users\user\projects превращается в /c/Users/user/projects. Домашняя директория ~ указывает на C:\Users\<имя>. Создадим папку проекта и посмотрим, что бывает с путём в привычном виде Windows:
cd ~
pwd
mkdir -p projects/hello-git
cd projects/hello-git
pwd
cygpath -w "$PWD"
cd C:\Windows\System32
cd "/c/Program Files"
pwd
cd -
/c/Users/user
/c/Users/user/projects/hello-git
C:\Users\user\projects\hello-git
bash: cd: C:WindowsSystem32: No such file or directory
/c/Program Files
/c/Users/user/projects/hello-git
Утилита cygpath -w переводит путь в формат Windows: такой путь можно вставить в проводник. Для bash обратная косая черта экранирует следующий знак, поэтому из C:\Windows\System32 он сделал C:WindowsSystem32 и не нашёл такую директорию. В одинарных кавычках cd 'C:\Windows\System32' сработает, но обратные слэши в путях лучше вообще не использовать и сразу писать /c/Windows/System32.
Путь с пробелом берите в кавычки. Команда cd /c/Program Files без них падает с ошибкой cd: too many arguments: bash видит два отдельных аргумента. С помощью cd - можно вернуться в предыдущий каталог, команда печатает его путь.
Базовые команды для работы с файлами:
| Команда | Что делает |
|---|---|
pwd | напечатать текущий каталог |
ls, ls -la | список файлов; с -la подробно и со скрытыми |
cd имя, cd .., cd ~ | перейти в папку, на уровень выше, домой |
mkdir -p a/b | создать папку вместе с вложенными |
touch файл.txt | создать пустой файл |
cat файл.txt | вывести содержимое файла |
cp, mv | скопировать, переместить или переименовать |
rm файл, rm -r имя | удалить файл, удалить папку с содержимым |
clear | очистить окно |

Первый репозиторий: git init, add, commit
Мы в каталоге hello-git. Создадим файл, инициализируем репозиторий и сделаем первый коммит. Сохранение изменений в git идёт в два шага: git add, затем git commit.
echo "# Hello Git" > README.md
git init
git status --short
git add README.md
git commit -m "Первый коммит: README"
git log --oneline
Initialized empty Git repository in C:/Users/user/projects/hello-git/.git/
?? README.md
warning: in the working copy of 'README.md', LF will be replaced by CRLF the next time Git touches it
[main (root-commit) 91a15ba] Первый коммит: README
1 file changed, 1 insertion(+)
create mode 100644 README.md
91a15ba Первый коммит: README
git init создал папку .git, в Windows она скрытая. Она содержит всю историю изменений кода проекта. git status --short пометил README.md знаками ??: git видит файл, но пока его не отслеживает. git add добавляет файл в индекс, то есть в список того, что войдёт в следующий коммит, а git commit -m записывает коммит с сообщением. Хеш 91a15ba у вас будет другим.
Предупреждение про LF и CRLF не ошибка. Команда echo в bash пишет окончания строк LF, а при core.autocrlf=true, которое ставит установщик, git предупреждает, что при следующем извлечении файла превратит их в виндовые CRLF. В репозиторий файл попадает с LF. Для проектов, с которыми работают на разных системах, установщик называет этот режим рекомендуемым для Windows, менять ничего не нужно.
Если запустить git commit без -m, git откроет редактор для сообщения коммита, при настройках по умолчанию Vim. Сообщение там набирают так: i, текст, Esc, затем :wq и Enter. Подробнее про режимы и выход в шпаргалке команды vim.

Ветки и слияние
Каждую задачу удобно вести в отдельной ветке: изменения копятся там, а main остаётся рабочей. Создадим ветку, сделаем в ней коммит и вольём его обратно:
git switch -c feature/greeting
echo "Привет из ветки" >> README.md
git commit -am "Добавил приветствие"
git switch main
git merge feature/greeting
git branch
Switched to a new branch 'feature/greeting'
warning: in the working copy of 'README.md', LF will be replaced by CRLF the next time Git touches it
[feature/greeting bbfb2a4] Добавил приветствие
1 file changed, 1 insertion(+)
Switched to branch 'main'
Updating 91a15ba..bbfb2a4
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
feature/greeting
* main
git switch -c позволяет создать ветку и сразу переключиться на неё. В старых инструкциях для этого пишут git checkout -b feature/greeting, эта команда тоже работает. Флаг -a у git commit сам добавляет изменённые файлы, которые git уже отслеживает; новый файл так не попадёт, для него нужен git add. Слияние прошло как Fast-forward: в main после ответвления коммитов не было, новый коммит оказался её прямым потомком, и git просто переместил указатель ветки вперёд. Звёздочка в списке git branch отмечает текущую ветку.

Удалённый репозиторий: push, clone, pull и SSH-ключ
Для работы с удалённым хранилищем без аккаунта сделаем «сервер» прямо на диске: пустой bare-репозиторий без рабочих файлов. С GitHub команды те же, только вместо ../server.git стоит адрес репозитория:
git init --bare ../server.git
git remote add origin ../server.git
git push -u origin main
git clone ../server.git ../hello-copy
Initialized empty Git repository in C:/Users/user/projects/server.git/
To ../server.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
Cloning into '../hello-copy'...
done.
git remote add origin запоминает адрес под именем origin. git push -u origin main отправляет ветку и связывает её с удалённой, поэтому дальше хватает короткого git push и git pull. git clone скачивает полную копию репозитория в новую папку. В окне Git Bash перед строкой To ../server.git будут ещё строки прогресса: Enumerating objects, Counting objects, Writing objects. Если потом сделать новый push из исходного проекта, git pull в hello-copy заберёт свежий коммит, в выводе будет Fast-forward.
Для GitHub по SSH нужен ключ. Его создают в том же Git Bash командой ssh-keygen -t ed25519 -C "ivan@example.com". Программа спросит, куда сохранить ключ (по умолчанию ~/.ssh/id_ed25519), и попросит парольную фразу. Забытую фразу восстановить нельзя. Публичную половину, файл id_ed25519.pub, выводят командой cat ~/.ssh/id_ed25519.pub и вставляют в настройки SSH-ключей аккаунта. Закрытый файл без .pub никому не передают. Если вы работаете по HTTPS, ключ не нужен: учётные данные хранит Git Credential Manager.

Git Bash, PowerShell и cmd: в чём разница
После рекомендуемого варианта PATH сам git одинаково работает во всех трёх. Различаются оболочки вокруг него: в Git Bash это bash с командами Unix, в PowerShell командлеты, которые передают друг другу объекты, в cmd командный язык Windows. Мы прогнали одни и те же команды в Git Bash, Windows PowerShell 5.1 и cmd:
| Команда | Git Bash | PowerShell 5.1 | cmd |
|---|---|---|---|
git --version | работает | работает | работает |
ls | утилита ls | псевдоним Get-ChildItem | «»ls» не является внутренней или внешней командой…» |
rm -rf old | удаляет папку | «Не удается найти параметр, соответствующий имени параметра «rf»» | «»rm» не является внутренней или внешней командой…» |
git --version && echo ok | работает | «Лексема «&&» не является допустимым разделителем операторов в этой версии» | работает |
| домашняя папка | echo $HOME → /c/Users/user | $HOME → C:\Users\user | echo %USERPROFILE% → C:\Users\user |
В PowerShell 7 операторы && и || уже есть, ошибка из таблицы относится к Windows PowerShell 5.1, который стоит в Windows 10. Псевдонимы ls, rm, pwd, cat в PowerShell 5.1 ведут на командлеты, поэтому без ключей команда срабатывает, а с Unix-ключами вроде -rf уже нет.
Подсказки, которые git печатает в ответ на команды, рассчитаны на POSIX-оболочку, и в PowerShell их не всегда можно выполнить как есть. Поэтому для git и для инструкций, написанных под Linux, мы бы держали открытым Git Bash. Скрипты для задач самой Windows пишут на PowerShell, как это делается, разобрано в статье про скрипты PowerShell.
Git Bash можно открыть и внутри VS Code: редактор сам находит установленный Git Bash, а сделать его терминалом по умолчанию можно командой «Terminal: Select Default Profile». Как в нём активировать виртуальное окружение Python, показано в статье VS Code для Python.

Частые вопросы о Git Bash
Почему интерактивный Python в Git Bash не запускается или зависает?
Окно MinTTY не представляется консольным программам Windows как обычная консоль. Интерактивные и полноэкранные программы, собранные не под MSYS2, в нём не работают без обходного пути, а вывод не латинскими буквами может искажаться. Такие программы запускают через утилиту winpty, например winpty python. Второй способ: переустановить Git и на шаге выбора терминала отметить «Use Windows’ default console window».
Как обновить Git Bash?
Git Bash обновляется вместе с Git for Windows. Команда git update-git-for-windows проверяет новую версию и спрашивает, ставить ли её, а с ключом -y ставит без вопроса. Можно и просто запустить свежий установщик поверх старой версии: он предложит прежние настройки.
Нужен ли Git Bash, если git работает в PowerShell?
Для самого git нет. Git Bash нужен, когда инструкция написана для Linux (rm -rf, && в Windows PowerShell 5.1, source, пути вида /c/...), и для ssh-keygen и других утилит из пакета.
Как открыть Git Bash сразу в папке проекта?
Щёлкните правой кнопкой мыши по папке в проводнике и выберите «Open Git Bash here». В версиях до 2.41 у пункта было другое название, «Git Bash Here». Пункт появляется, если при установке не сняли флажок этого компонента. Из уже открытого окна в папку переходят командой cd /c/путь/к/папке.








