Шпаргалки по Git

Post Tag: techit

Графические шпаргалки: раз и два

Шпаргалка:

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, которая создается для каждого проекта как раз подходит сюда.

Полезные ссылки:

comments powered by Disqus