Основные команды GIT которые я использую
Глобальный конфиг
// Глобальный конфиг
$ vi ~/.gitconfig
// Задать main как default branch
$ git config --global init.defaultBranch main
Остальные команды
// Задать парамеры идентификации git глобально (лучше использовать локально, когда много git проектов с разными пользователями)
$ git config --global user.name "your_username"
$ git config --global user.email "your_email"
// Посмотреть текущие параметры
$ git config -l --global
$ git config --list
$ git config user.name
$ git config user.email
// Задать VSCODE редактором по умолчанию
$ git config --global core.editor "code --wait"
Не отслеживать изменения chmod
$ git config core.fileMode false
git log
// Получить информацию по 2 последним коммитам
$ git log -2
// Получить лог удаленного (на другом хосте) репо
$ git log origin/master
// Посмотреть историю изменения одного файла
$ git log -p имя_файла
$ git log --name-only
// Получить дерево коммитов
$ git log --graph --all --oneline --decorate -20
Закоммитить все и отправить на сервер
$ git status
$ git add --all
$ git commit -m "Что я сделал в результате работы"
$ git push
– отправить все бранчи на удаленный сервер
$ git push --all -u
Показать все файлы которые могут быть добавлены в коммит.
$ git status -u
Забрать git из удаленного репозитория (один из вариантов)
$ git init
$ git remote add origin http://myserver/myProject.git
$ git pull
// В случае, или у вас в локальной ветке уже закомиченны какие то изменения, лучше выполнить команду
$ git pull -rebase
$ git branch -a
$ git checkout myProject_branch
Создать новый бранч и отправить этот бранч на удаленный git сервер
// Создать новый бранч
$ git checkout -b my_new_branch
// Отправить этот бранч на удаленный git сервер
$ git push -u origin my_new_branch
// Иногда вот так приходится делать
$ git push --set-upstream origin my_new_branch
Посмотреть что поменялось
// посмотреть изменения в файле
$ git diff website/01-docs/02-linux/08-containers/02-docker/00-index.md
// посмотреть изменения в файле
$ git diff --name-only 06be2bf42c94c669f2c656593b10716fee7ad6dc
Отмена сделанных изменени
–soft сбрасывает коммит так, будто не было git add на эти файлы –mixed сбрасывает коммит так, будто git add на файлы сделан, это по-умолчанию. –hard сбрасывает коммит и удаляет изменения.
Отменить сделанные изменения (все данные потеряются)
$ git reset --hard
Удалить untracked files
$ git clean -fd
Добавить изменения в мастер ветку
$ git checkout master
$ git merge --no-ff my_new_branch
–no-ff – no fast forward
// Удаление ненужной ветки
$ git branch -D my_new_branch
Заменить Remote Origin
$ git remote -v
origin https://github.com/webmakaka/sysadm.ru (fetch)
origin https://github.com/webmakaka/sysadm.ru (push)
$ git remote rm origin
// Меняю с https на ssh
$ git remote add origin [email protected]:webmakaka/sysadm.ru.git
$ git push origin master
// Или можно переключить origin на bitbucket
$ git remote add origin https://[email protected]/sysadm-ru/sysadm.ru.git
$ git push -u origin master
Объединить несколько коммитов в 1 с помощью rebase
// Объединить последние коммит к определенному коммиту
$ git rebase -i fe2aeafe3403901e37a01a7f403cee01801830c6
// Объединить 5 последних коммитов
$ git rebase -i HEAD~5
заменить pick на squash для всех кроме первого (сверху).
Подробнее:
https://ru.stackoverflow.com/questions/462251/%D0%9A%D0%B0%D0%BA-%D0%BE%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%82%D1%8C-%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE-%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D1%82%D0%BE%D0%B2-%D0%B2-%D0%BE%D0%B4%D0%B8%D0%BD
Заменить заголовок коммита
// Поменять в последнем коммите заголовок
$ git commit --amend -m "ваш заголовок"
Поменять автора коммита
-- Меняю в последнем коммите автора
$ git commit --amend --author "My Name <[email protected]>"
https://stackoverflow.com/questions/3042437/change-commit-author-at-one-specific-commit
both modified - выбрать одну из сторон, не делая ручной merge
If you’re already in conflicted state, and you want to just accept all of theirs:
Принять их сторону
$ git checkout --theirs .
$ git add .
If you want to do the opposite:
Принять нашу сторону
$ git checkout --ours .
$ git add .
This is pretty drastic, so make sure you really want to wipe everything out like this before doing it.
https://stackoverflow.com/questions/10697463/resolve-git-merge-conflicts-in-favor-of-their-changes-during-a-pull
Выделение цветом
$ git config --global color.ui true
Можно также посмотреть здесь:
https://unix.stackexchange.com/questions/44266/how-to-colorize-output-of-git
Показывать текущую ветку (branch) в консоли:
$ curl -o ~/.git-prompt.sh \
https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh
$ source ~/.git-prompt.sh
$ export PS1='[\W] git:$(__git_ps1 "(%s)") '
или
$ export PS1='\W$(__git_ps1 "(%s)") > '
или
$ export PS1='Geoff[\W]$(__git_ps1 "(%s)"): '
Откатить файлы к определенному коммиту
git checkout a82de97faaafee458d47c60a51e12f7d7c7dba13 file_path/file_name
git rebase -i HEAD~2
Создать ветку от произвольного коммита
$ git checkout -b <branch-name> <commit-id>
Или
$ git branch <branch-name> <commit-id>
Cherry Pick
$ git cherry-pick 0b72ec4ba3ca997b89564d3d9c61cb10a3127ba3
Отменить комит из истории (git revert)
Не приходилось использовать
Если на github появился submodule, содержимое которого нельзя посмотреть
Я удалял этот submodule
$ rm ./project2-graphql-apollo/app/client/.git
$ git rm --cached ./project2-graphql-apollo/app/client/
Дополнительно
https://gist.github.com/aykuli/e64b05448165d968a6c0e543451c1550