Версии бинарных файлов хранятся полностью, изменения ASCII-файлов
фиксируются с помощью diff
https://proglib.io/p/git-for-half-an-hour
sudo apt-get install git && sudo zypper install git && sudo dnf install git
git config --global user.name "My Name"
git config --global user.email myEmail@example.com
git config --global color.ui true
git config --global color.status auto
git config --global color.branch auto
sudo git config --global pager.all more # задать пейджер глобально
git config --global pager.log false # задать пейджер для команды log
git config --global core.pager "less -FRSX" # -F не пагинировать мелкий output
Конфигурационные настройки хранятся в:
/project/dir/.git/config # git config
/etc/gitconfig # git config --global
~user/.gitconfig # --global # sudo git config --global
git config --list [--global] # просмотр настроек
git --help
git komanda --help # help po komande
git status # status
Создание нового репозитория
cd project/dir
git init
Добавление файлов в index под контроль
Файлы бывают:
commited (уже есть в одном из коммитов)
index (git add filename после последнего коммита)
other (лежат в директории, но не добавлены)
git add [ список файлов ]
git add . # все что есть в директории
git add -M # добавит все, учтет удаленные файлы
git rm [ список файлов ] удаляет файлы из директории и из git'а
git reset # обнуляет index (разудаляет свежедобавленное)
git reset [ список файлов ] #
.gitignore список файлов, которые исключаются из контроля
file
dirname/
*.obj действует на подкаталоги
/ *.obj действует только на начальный каталог
git ls-files # актуальный список файлов commit+index
git ls-files --stage # в длинном формате
git ls-files --others # список всех "no add"
git ls-files --others --exclude-standard # no add, хайдим игнорируемые
git ls-tree -r [ HEAD | commitID ] # список файлов входящих в commit
git diff --staged --name-status # add-ed файлы которые пойдут в коммит
Посмотреть содержимое файла из коммита
git ls-tree -r HEAD | grep bb
100644 blob 7b8a8634952bf28c1308601177ec61a6e5d11351 bb
git show HEAD:bb
git show 4546e5b:bb
git show :bb # в последнем коммите
git show bb # подробности про файл
git commit -m "Comment Mesage" # Новый коммит, только _свежие_ git add
git commit --amend --no-edit # Дополнить в последний коммит
git commit -a -m "Comment" # Новый коммит, изменившиеся отслеживаемые
git commit -a --amend --no-edit # Дополнить последний коммит изменениями
git log
git log --oneline # компактный список коммитов
git show 953e115f9e54b685041526 # подробности про коммит
git show filename # подробности про файл
git restore [ file.txt | . ] # вытащить файл | все по последнему коммииту
git log --oneline
git restore file.txt --source=17fc095 # вытащить из конкретного коммита
git clean -f -d # удалить все неотслеживаемые файлы
git reset --hard HEAD # удаляет все не входящее в последний коммит
git branch # Посмотреть текущую ветку
git branch [ --merged | --no-merged ] # посмотреть слитые/неслитые ветки
git branch branch-name # Создать ветку скопировав из текущей
git switch -c feature/new-feature # Создать и переключиться на новую ветку
# перед уходом из ветки надо закоммититься
git commit -a -amend -m "Fixing feaure" [ --noedit ]
git switch master # Вернуться обратно на ветку master
# Содержимое рабочей директории может разительно поменяться!!!
git merge --no-commit --no-ff feature # проверить на конфликты при слиянии
git merge fiature # влить в текущую ветку все, что сделано в feature
# сработает только если нет пересечения по файлам
git merge --abort # прервать текущее слияние
# -X форсированное слияние при пересечении по файлам
git merge -X ours branch-name # Всегда использовать нашу версию файла
git merge -X theirs branch-name # Всегда использовать файл из branch-name
git branch --merged
git branch -d feature/add-login # удалить ненужную ветку feature
Простой shared-репозиторий с доступом ssh для членов группы
server:
sudo groupadd gitusers # создаем группу gitusers
sudo usermod -a -G gitusers user1 # добавляем в нее пользователей
sudo mkdir -p /var/git
sudo chgrp gitusers /var/git
sudo chmod u=rwx,g=rwxs /var/git # создаем каталог с g=rws для gitusers
cd /var/git # создаем в каталоге BARE-репозиторий (расшариваемый ничей)
sudo git init --bare --shared=group my_project.git
# Подключение к репозиторию локальное
git config --global --add safe.directory /var/git/my_project.git
git clone /var/git/my_project.git
# Подключение к репозиторию по ssh (должен работать беспоарольный ssh)
git clone git+ssh://user1@your-server.com/var/git/my_project.git
# Первый push в абсолютно пустой репозиторий конкретную ветку "master"
git branch
git push -u origin master # Желательно всем работать в разных ветках
git commit -am Comment-N # сохранить свой последний
git push # commit на shared
git fetch --dry-run # узнать, обновлялся ли shared-репозиторий
git pull # подкачать себе обновление с shared
git fetch # сгружает изменения но не меняет рабочей директории
git log HEAD..origin # посмотреть, что там в сгруженном
Простой shared-репозиторий с беспарольным доступом по git://
git init --bare --shared=group /путь/к/project1.git
git daemon --reuseaddr --base-path=/путь/к/ /путь/к/ # расшарит все подкаталоги
git daemon --reuseaddr --export-all -- /путь/к/project1.git # расшарит dir
sudo firewall-cmd --add-service=git
git clone git://you-server/project1.git # подцепляемся без авторизации
Простые shared-репозитории с HTTP или GIT доступами
docker run -d -v /git/репозитории:/opt/git-server githttpd/githttpd:latest
docker run -d -p 4080:80 -v /git/репозитории:/git nsy22/git-http-backend
cd /git/репозитории && git init --bare test.git
cd /git/репозитории/test.git && git config http.receivepack true
Адреса репозиториев: http://localhost:4080/git/repodir.git
# Легковесный git-daemon в контейнере
docker run -d --name git-daemon -d -p 9418:9418 -v /git:/git sdelrio/git-daemon
# git-server с web-интерфейсом
docker run -d --name gitbox -p 80:80 -p 9418:9418 -v /git:/repos nmarus/gitbox
Популярность: 31, Last-modified: Fri, 10 Jul 2026 14:01:13 GmT