Версии   бинарных   файлов   хранятся   полностью,   изменения  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


Файлы бывают:
   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



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     # посмотреть, что там в сгруженном


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  # подцепляемся без авторизации



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