Шпаргалки по Git
Feb 20, 2017 · 3 minute read · CommentsГрафические шпаргалки: раз и два
Шпаргалка:
git init project-name
git add text.txt
git rm text.txt
git status
git commit -a -m "Commit description"
git push origin master
# Скачать все ветки с origin, но не мерджить их в локальный репозиторий
git fetch origin
git branch some_branch
# Начать работать с веткой some_branch (уже существующей)
git checkout -b some_branch origin/some_branch
#Просмотреть все существующие ветви
git branch -a # | grep something
git merge some_branch
#История с именами файлов и псевдографическим изображением бранчей:
git log --stat --graph
#Улучшение для log
git config --global alias.grog 'log --graph --abbrev-commit --decorate --all --format=format:"%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(dim white) - %an%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n %C(white)%s%C(reset)"'
#Изменения, сделанные в заданном коммите:
git show d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
#Посмотреть, кем в последний раз правилась каждая строка файла:
git blame file.txt
#Откатиться к конкретному коммиту (хэш смотрим в «git log»):
git reset --hard d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
#Попытаться обратить заданный commit (но чаще используется branch/reset + merge):
git revert d8578edf8458ce06fbc5bb76a58c5ca4a58c5ca4
#Просмотр изменений (суммарных, а не всех по очереди, как в «git log»):
git diff # подробности см в "git diff --help"
#"Упаковка" репозитория для увеличения скорости работы с ним:
git gc
#Добавляем ключ на github
ssh-keygen -t rsa -b 4096 -C "test@test.com"
vim /home/test/.ssh/id_rsa.pub
ssh -T git@github.com
Частые проблемы:
Закоммитил и тут же понял, что нужно внести небольшие изменения:
# внесите изменения
git add .
git commit --amend
# следуйте подсказкам, чтобы изменить или оставить прежний комментарий
# теперь последний коммит содержит наше изменение!
Нужно изменить комментарий к последнему коммиту:
git commit --amend
# следуйте подсказкам, чтобы изменить комментарий
Закоммитил что-то в master, а оно должно быть в новой ветке:
# создайте новую ветку из текущего состояния master
git checkout -b имя-новой-ветки
# удаляем коммит из ветки master
git checkout master
git reset HEAD~ --hard
git checkout имя-новой-ветки
# ваш коммит теперь живет в новой ветке
Cлучайно закоммитил не в ту ветку:
# откатываем последний коммит, но не удаляем изменения
git reset HEAD~ --soft
git add .
git stash
# переключаемся на нужную ветку
git checkout имя-верной-ветки
git stash pop
git add .
git commit -m "тут ваш комментарий"
# теперь изменения в нужной ветке
Запускаю diff, но ничего не происходит?
git diff --staged
Вернуть fork к изначальному состоянию
git remote add upstream /url/to/original/repo
git fetch upstream
git checkout master
git reset --hard upstream/master
git push origin master --force
Сделать первый PR
git clone /url/to/fork/repo
git remote add upstream /url/to/original/repo
git checkout master
git pull upstream master
git push origin master
git checkout -b feature/add
git push -u origin feature/add
Когда у вас есть файлы, которые специфичны для данного проекта и для вашего рабочего окружения(например, логи, third-party утилита) используйте .git/info/exclude
. Этот файл не коммитуется и остается только в локальном репозитории.
Когда у вас несколько проектов и везде создается что-либо, что вы не хотите коммитить(например, *.swp файлы Vim) используйте ~/.gitconfig
. Вышеприведённый пример папки .idea, которая создается для каждого проекта как раз подходит сюда.