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