Подключение к репозиториям
git remote
— показать имена всех удаленных репозиториев
git remote -v
— показать все удаленные репозитории
git remote rm [name]
— удалить назначенный удаленный репозиторий
Регистрация изменений
git status
— показать незарегистрированные изменения
git log --oneline [-n 5]
— краткий просмотр коммитов
git log
— просмотр коммитов подробный
git log -p -1
— просмотр изменений последнего commit-a
git rev-list --all --count
— просмотр количества коммитов
git commit --amend -m "third commit"
— заменяет последний коммит новым (затем необходимо выполнить push -f
)
git reset --soft <id_commit>
— то же самое
git reset --soft <id_repository>
— отменяет конкретный коммит без отмены индексации (последнего git add)
git reset --mixed <id_repository>
— отменяет конкретный коммит с отменой индексации файлов (последнего git add)
git reset --hard <id_repository>
— отменяет конкретный коммит с отменой индексации файлов и их физ удалением!
git reset --hard[mixed|soft] <id_repository> file_name
— то же самое, только для конкретного файла
git diff
— показать конфликты
git blame
— показать история файла от коммита к коммиту (only linux: git ls-tree -r -z --name-only HEAD -- */*.c | sed 's/^/.\//' | xargs -0 -n1 git blame --line-porcelain work/templates/financial-timesheet.html |grep -ae "^author "|sort|uniq -c|sort -nr
)
git summary --line
— суммарное количество написанного кода пользователями
git restore <filename>
— удаляет все локальные изменения в <файле> (будьте осторожны)
git restore --source <id_commit> <filename>
— восстанавливает содержимое файла из конкретного коммита
Переиндексация репозитория (для применения .gitignore)
git rm --cached <имя_файла>
— удаление файла из индекса без удаления самого файла физически
find . -name "*.pyc" -exec git rm -f --cached "{}" \;
— удаление *.pyc файлов из индекса
git rm -r --cached . && git add . && git commit -m ".gitignore apply"
— удалить рекурсивно все файлы из индекса для применения .gitignore
git ls-tree --full-tree -r --name-only HEAD
— посмотреть список отслеживаемых файлов
Навигация по коммитам
git rev-parse HEAD
— показать хэш текущего коммита
git checkout <id_commit>
— переход к конкретному коммиту внутри текущей ветки
git checkout
— переход к последнему (самому свежему) коммиту внутри текущей ветки. Используется для возврата от предыдущей команды
git checkout master~2 <Makefile>
— согласно оф докам «take a file out of another commit» — насколько я понимаю, копирует файл (в данном примере Makefile) из позапрошлого коммита в текущий. 2 — указывет из какого коммита (1 — предыдущий, 2 — позапрошлый, и т д). master — название ветки
Работа с ветвями
git branch [name_of_your_new_branch]
— создание новой ветви
git checkout [name_of_your_branch]
— переход на текущий коммит указанной ветки (сигнатура совпадает с переходом на коммит внутри текущей ветки)
git checkout -b [name_of_your_new_branch]
— создание ветки и переход на нее
git branch -a
— просмотр всех веток репозитория
git push origin [name_of_your_new_branch]
— выкладываем ветвь на гитхаб
git branch -d [name_of_your_new_branch]
— удаление ветви в локальном репозитории
git branch -D [name_of_your_new_branch]
— форсированное удаление ветви в локальном репозитории
git push origin :[name_of_your_new_branch]
— удаление ветви на гитхаб
git remote add [name_of_your_remote] [name_of_your_new_branch]
— назначение нового удаленного репозитория для указанной ветки
Слияние веток
git merge
— слияние текущей ветки с изменениями, скачанными в refs/remotes/ командой git fetch
git merge <branch_name>
— делает слияние текущего коммита текущей ветки с указанной веткой
Подмодули:
git submodule add <адрес_удаленного_репозитория>
— создает подмодуль (ссылку на другой репозиторий) внутри текущего репозитория
git submodule init
— инициализирует подмодули в локальном репозатории (берет их из .gitmodules
)
git submodule update
— обновляет содержимое подмодулей (что-то наподобие git pull
для подмодулуй)
Дополнительно:
git help name_command
— подсказка по команде
Некоторые рабочие формулы:
git pull <adress> == git fetch <adress> ; git merge git commit -a -m 'commit' == git add . ; git commit -m 'commit' git commit --amend -m "commit" == git reset --soft <id_last_repository>;git commit -m "commit"
В случае, если вы не хотите коммитить изменения, но необходимо переключиться на другую ветку, можно их сохранить в стэк через команду git stash
:
Команда stash
[не проверено]
git stash list
: показать все изменения в стекеgit stash show
: показать последнее изменение в стеке (патч)git stash apply
: применить последнее изменение из стека к текущей рабочей копииgit stash drop
: удалить последнее изменение в стекеgit stash pop
: применить последнее изменение из стека к текущей рабочей копии и удалить его из стекаgit stash clear
: очистить стек изменений
Полезные ссылки:
- Git на пальцах
- Разрешение конфликтов при мержах на пальцах
- Сложная настройка .gitignore