Info
Content

4. Коммит изменений

macbook:test vandud$ git rm govno 
rm 'govno'

macbook:test vandud$ 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)
	deleted:    govno

macbook:test vandud$ git commit -m 'zhopa23'
[master fb6a8c6] zhopa23
 1 file changed, 1 deletion(-)
 delete mode 100644 govno
 
macbook:test vandud$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)
nothing to commit, working tree clean
macbook:test vandud$ 

Выше видно как я сделал git rm (он удаляет файл и сразу же добавляет это изменение в индекс)
Далее видим что в статусе сразу видно это удаление и предлагается сделать коммит
Делаю коммит и в статусе видно что моя текущая копия впереди от ориджина на один коммит (предлагается запушить)

.gitignore

macbook:test vandud$ cat .gitignore 
*.zhopa

macbook:test vandud$ vim zhopa.zhopa

macbook:test vandud$ git status -s
?? .gitignore

macbook:test vandud$ git add zhopa.zhopa 
The following paths are ignored by one of your .gitignore files:
zhopa.zhopa
Use -f if you really want to add them.

Файл .gitignore нужен для вывода антрэкед файлов из поля зрения гита. Уже затреченые файлы он продолжит видеть не смотря на гитигнор

По формату файла можно смотреть тут - https://git-scm.com/docs/gitignore

macbook:test vandud$ git add -f zhopa.zhopa 
macbook:test vandud$ git status -s
A  zhopa.zhopa
?? .gitignore

git-add

Добавляет контент файлов в индекс
Можно перечислять файлы поименно, можно использовать ключ -A/--all, можно использовать шаблоны как в .gitignore

  • -f - добавит не смотря на гитигнор
  • --dry-run - не добавит файлы, покажет что с ними произойдет при обычном добавлении
macbook:test vandud$ git add --dry-run au.zhopa 
The following paths are ignored by one of your .gitignore files:
au.zhopa
Use -f if you really want to add them.

macbook:test vandud$ git add --dry-run aou.aeou 
add 'aou.aeou'

macbook:test vandud$ git status -s # видим что ничего не добавилось
A  zhopa.zhopa
?? .gitignore
?? aou.aeou

Чтобы обновить инфу об удаленных файлах в индексе, нужно добавить их командой add

macbook:test vandud$ touch test
macbook:test vandud$ git status -s
?? test
macbook:test vandud$ git add test
macbook:test vandud$ git status -s
A  test
macbook:test vandud$ rm test
macbook:test vandud$ git status -s
AD test
macbook:test vandud$ git add test
macbook:test vandud$ git status -s
macbook:test vandud$ 

git-rm

Удаляет файл(ы) и обновляет индекс, принимает имена файлов или шаблоны

Не даст удалить проиндексированный но не закоммиченный файл
Чтобы все равно удалить, нужно использовать ключ -f/--force

macbook:test vandud$ git add aou.aeou 
macbook:test vandud$ git rm aou.aeou 
error: the following file has changes staged in the index:
    aou.aeou
(use --cached to keep the file, or -f to force removal)

macbook:test vandud$ git commit -m 'test rm'
[master cc5a978] test rm
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 aou.aeou

macbook:test vandud$ git rm aou.aeou 
rm 'aou.aeou'
macbook:test vandud$ git status -s
D  aou.aeou
?? .gitignore

А вот так с ключом -f

macbook:test vandud$ touch test
macbook:test vandud$ git status -s
D  aou.aeou
?? .gitignore
?? test

macbook:test vandud$ git add test 
macbook:test vandud$ git status -s
R  aou.aeou -> test
?? .gitignore

macbook:test vandud$ git rm test 
error: the following file has changes staged in the index:
    test
(use --cached to keep the file, or -f to force removal)

macbook:test vandud$ git rm -f test
rm 'test'
macbook:test vandud$ git status -s
D  aou.aeou
?? .gitignore
  • --cached - удалит из индекса но оставит сам файл
macbook:test vandud$ git status -s
A  zhopa.zhopa
?? .gitignore
?? aou.aeou

macbook:test vandud$ cat zhopa.zhopa 
santoehu

macbook:test vandud$ git rm --cached zhopa.zhopa 
rm 'zhopa.zhopa'

macbook:test vandud$ git status -s
?? .gitignore
?? aou.aeou

macbook:test vandud$ cat zhopa.zhopa 
santoehu

git-commit

"Слепок индекса"

  • -a - загонит состояние директории в индекс
    (удалит удаленное, обновит измененное, добавит новое итд)

В гит коммит можно передать имена файлов, тогда будут закоммичены только изменения из них и будет проигнорирован индекс

  • --amend - изменить последний неопубликованный коммит (объединить последний коммит с тем что коммитится в момент выполнения команды)
macbook:test vandud$ git log --oneline
cc5a978 (HEAD -> master) test rm
fb6a8c6 zhopa23
5876123 (origin/master) govno
3993fdf rm
6b356d6 double zhop commit
6cdf909 zhopnyi commit
macbook:test vandud$ git status -s
D  aou.aeou
?? .gitignore
macbook:test vandud$ git add .gitignore 
macbook:test vandud$ git status -s
A  .gitignore
D  aou.aeou
macbook:test vandud$ git commit -m '--amend test' --amend
[master 176e908] --amend test
 Date: Sun Feb 7 05:09:54 2021 +0300
 1 file changed, 1 insertion(+)
 create mode 100644 .gitignore
macbook:test vandud$ git status -s
macbook:test vandud$ git log --oneline
176e908 (HEAD -> master) --amend test
fb6a8c6 zhopa23
5876123 (origin/master) govno
3993fdf rm
6b356d6 double zhop commit
6cdf909 zhopnyi commit
No Comments
Back to top