Info
Content

3. Обзор текущего состояния локального репозитория

Для обзора текущего состояния локального репозитория обычноиспользуют команду git status
К git status можно добавлять ключ -s, для краткого вывода

[vandud@thinkpad test]$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   a
	new file:   b
	new file:   c

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   a
	deleted:    b
	modified:   c

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	txt

[vandud@thinkpad test]$ git status -s
AM a
AD b
AM c
?? txt

git add

https://git-scm.com/docs/git-add

Команда git add FILE добавляет файл в индекс гита
Индекс содержит в себе снапшот контента рабочего дерева и из него будет браться контент для следующего коммита

Таким образом после изменений в рабочей директории перед коммитом нужно выполнить команду add чтобы добавить новые или модифицированные файлы в индекс

Она всего лишь добавляет контент файла на момент выполенения команды в индекс. Поэтому если после ее выполнения были сделаны еще изменения которые должны войти в один коммит с предыдущими, то нужно просто повторить команду add для нужных файлов

  • -f - добавить в индекс и игнорируемые файлы
  • -i - интерактивный режим
  • -A/--all - добавить в индекс все файлы в текущем поддереве

git status

https://git-scm.com/docs/git-status
Показывает состояние текущего расположения. Точнее показывает разницу между текущим состоянием и последним коммитом

При выводе краткого статуса возможно два варианта

XY PATH
XY ORIG_PATH -> PATH # когда файл был переименован  
  • X - статус в индексе
  • Y - статус в рабочей директории

Значения статусов:

  • ' ' = unmodified
  • M = modified
  • A = added
  • D = deleted
  • R = renamed
  • C = copied
  • U = updated but unmerged

git commit

Создает новый коммит содержащий в себе текущий контент индекса и переданное ему сообщение, которое описывает сделанные изменения

Коммитируемый контент может быть добавлен в коммит несколькими способами

  • git add - добавляет файлы в индекс и коммит строится на основе индекса
  • git rm - удаляет файл и удаляет его из индекса
  • перечисление файлов как аргументов для команды commit (файлы должны быть известными гиту, с untracked файлами не прокатит)
  • опция -a для команды commit, она автоматически приведет индекс к состоянию рабочей директории, то есть она добавит новые файлы в индекс, удалит удаленные, добавит измененные
  • интерактивный режим

Опция --dry-run позволит увидеть все добавленное в индекс для следующего коммита (т.е. все что будет включено в следующий коммит)

  • -a - описано выше
  • --short/--porcelain - то же что и dry-run только кратко
  • --long - то же что и dry-run
  • --branch - показывает ветвь и некоторую инфу
  • -F - файл для коммитного комментария
    [vandud@thinkpad test]$ git commit -F - <<eof
    zhopa
    niga
    mazafaka
    eof
    [master 706cb5d] zhopa niga mazafaka
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 file
    
  • --author - ` перезаписывает автора коммита
    [vandud@thinkpad test]$ git commit -m 'test author field' --author='I V Dudin <i@vandud.ru>'
    [master c58e9c6] test author field
     Author: I V Dudin <i@vandud.ru>
     1 file changed, 17 insertions(+)
    
  • --date - перезаписывает дату коммита
  • -e - позволяет отредактировать текст коммита взятый из файла -f, коммитного объекта -C или введенный через ключ -m
  • -q - не выводить коммитное саммари
    [vandud@thinkpad test]$ git commit -m 'test author field' --author='I V Dudin <i@vandud.ru>'
    [master c58e9c6] test author field
     Author: I V Dudin <i@vandud.ru>
     1 file changed, 17 insertions(+)
    [vandud@thinkpad test]$ git commit -m 'test author field' --author='I V Dudin <i@vandud.ru>' -q
    [vandud@thinkpad test]$
    

git log

Показывает историю коммитов (коммиты и некоторую инфу о них)
По умолчанию в обратно-хронологическом порядке (новее=выше)

  • git log -p - покажет изменения внесенные каждым коммитом
  • --all - все коммиты. полезно когда сделал чекаут и указатель HEAD указывает на более старый коммит, тогда чтобы увидеть коммиты новее, нужно указать этот ключ
  • -NUM - можно огранить вывод, указать кол-во коммитов которые нужно отобразить
  • еще можно ограничить по дате коммита, since after until before
  • --stat - покажет краткую статистику по каждому коммиту
  • --pretty - позволяет изменить формат отображения
    • short
    • full
    • fuller
    • oneline
    [vandud@thinkpad test]$ git log --pretty=oneline
    760edd0f7e412540b27a9c5427bf763316777ae4 (HEAD -> master) test author field
    c58e9c6330e07cba5a96e8dbc07fdf6b058e81d2 test author field
    706cb5d8e742e69452f437360f8324b443d78a7b zhopa niga mazafaka
    ea678985faa7e47ac41f26303131506284fa4cb6 test
    80e290dcb97fec2769193ce1aae63b322a553e28 (origin/master, origin/HEAD) test push on sshlink (without login/password)
    ddcad045cd054bb4c8774e5f998681f63800e588 git test commit
    
    • format - позволяет указать формат
      [vandud@thinkpad test]$ git log --pretty=format:"%h - %an, %ar : %s"
      760edd0 - I V Dudin, 51 minutes ago : test author field
      c58e9c6 - I V Dudin, 83 minutes ago : test author field
      706cb5d - Иван Дудин, 2 hours ago : zhopa niga mazafaka
      ea67898 - Иван Дудин, 28 hours ago : test
      80e290d - Ivan Dudin Test, 1 year, 1 month ago : test push on sshlink (without login/password)
      ddcad04 - Ivan Dudin Test, 1 year, 1 month ago : git test commit
      
  • --graph - показывает граф коммитов
    [vandud@thinkpad test]$ git log --pretty=oneline --graph
    * 760edd0f7e412540b27a9c5427bf763316777ae4 (HEAD -> master) test author field
    * c58e9c6330e07cba5a96e8dbc07fdf6b058e81d2 test author field
    * 706cb5d8e742e69452f437360f8324b443d78a7b zhopa niga mazafaka
    * ea678985faa7e47ac41f26303131506284fa4cb6 test
    * 80e290dcb97fec2769193ce1aae63b322a553e28 (origin/master, origin/HEAD) test push on sshlink (without login/password)
    * ddcad045cd054bb4c8774e5f998681f63800e588 git test commit
    [vandud@thinkpad test]$ git log --pretty=short --graph
    * commit 760edd0f7e412540b27a9c5427bf763316777ae4 (HEAD -> master)
    | Author: I V Dudin <i@vandud.ru>
    | 
    |     test author field
    | 
    * commit c58e9c6330e07cba5a96e8dbc07fdf6b058e81d2
    | Author: I V Dudin <i@vandud.ru>
    | 
    |     test author field
    | 
    * commit 706cb5d8e742e69452f437360f8324b443d78a7b
    | Author: Иван Дудин <i.dudin@i-free.com>
    | 
    |     zhopa
    |     niga
    |     mazafaka
    | 
    * commit ea678985faa7e47ac41f26303131506284fa4cb6
    | Author: Иван Дудин <i.dudin@i-free.com>
    | 
    |     test
    | 
    * commit 80e290dcb97fec2769193ce1aae63b322a553e28 (origin/master, origin/HEAD)
    | Author: Ivan Dudin Test <s@vandud.ru>
    | 
    |     test push on sshlink (without login/password)
    | 
    * commit ddcad045cd054bb4c8774e5f998681f63800e588
      Author: Ivan Dudin Test <s@vandud.ru>
      
          git test commit
    
  • -S - типа греп по коммитам
    [vandud@thinkpad test]$ git log -S zhopa
    commit 760edd0f7e412540b27a9c5427bf763316777ae4 (HEAD -> master)
    Author: I V Dudin <i@vandud.ru>
    Date:   Tue Dec 8 06:08:59 2020 +0300
    
        test author field
    
  • в самом конце команды или после знака -- можно указать путь до папки или файла, будут отфильтрованы коммиты которые его затрагивают

Есть два понятия, коммитер и автор, они отличаются

git checkout

Переключение между ветвями или восстановление файлов в рабочей директории
Приводит файлы в рабочей директории к состоянию какой-либо версии из индекса

Переключение на ветвь это изменение файлов в соответствии с индексом и перевешивание указателя HEAD

HEAD – это указатель на коммит в вашем репозитории, который станет родителем следующего коммита

  • -b - название новой ветки
No Comments
Back to top