1 октября 2014 г.

GIT Workflow

Про гит в гугле информации предостаточно. И, скорее всего, моя статейка затеряется где-нибудь на последних страницах результатов в поисковике. Но цель этой писанины — просто сделать конспекты самой себе. Ну и, как дополнение, сделать эти заметки доступными для других. Кроме того, можно будет подопечным джуниорам просто давать ссылку, чтобы курили и изучали))

Для лучшего понимания гита есть очень хорошая интерактивная обучалка.

Все команды можно посмотреть тут GIT Workflow.


Итак, поехали

Команды тут представлены примерно в том порядке, в котором они используются в рабочем процессе. Поэтому не удивляйтесь, что вроде бы связанные команды описаны с очень далёкими номерами друг от друга.

1. Посмотреть изменения, которые вы внесли, но которые еще не закоммичены. Хотя правильнее сказать, не сами изменения, а список файлов:
git status
2. Добавить внесённые изменения в stage:
git add -u // добавятся изменения только в тех файлах, которые уже находятся под гитом
git add -A // добавятся и новые файлы в том числе
git add <filename> // добавится указанный файл, можно использовать паттерны в стиле dao/*
2a. Если вы случайно добавили в stage изменения файла, которые не хотите коммитить (например, конфиги, которые пока что изменили только для себя), то этот файл можно удалить из stage:
git reset HEAD <filename>
3. Сделать локальный commit. В него попадут все изменения, которые были добавлены в stage. Обратите внимание, что на первой строке двойная кавычка не закрывается. Таким образом можно писать commit-сообщение в несколько строк:
git commit -m "Исправление какого-то бага
бла-бла-бла…"
Небольшая ремарка по поводу «что такое stage». Можно его рассматривать как некоторый snapshot изменений. Обычно я объясняю не очень понятно, поэтому попробую сделать это на примере. Итак, у вас есть файл main.test. Предположим, внутри него вы добавили строку
super test = true
И выполнили команду
git add main.test
Затем изменили эту строку на
super-puper-test=false
Вот тут после выполнения команды
git commit
получится интересная ситуация. В commit попадёт строка «super test = true». А строка «super-puper-test=false» будет локальным незакомиченным изменением. Как-то так.

4. «Спрятать» текущие изменения в stash («карман»). // тодо: надо добавить много текста с описанием, что такое stash, но мне теперь лень, поэтому потом как-нибудь
git stash -A
git stash save "Я тут делала какую-то фичу"
5. Забрать изменения с сервера:
git pull
git pull --rebase // тодо: описать, что такое ребейз и зачем он нужен, при мерже не использовать ни в коем случае!!!

6. Отправить свои локальные commit’ы на сервер:
git push
git push -f // тодо: подробнее про этот параметр

7. «Достать» изменения из stash’а. Тут достаётся изменение, которое было спрятано последним (мы же помним, что такое стэк, правда?) и эти изменения из stash’а удаляются, но если возникнут конфликты, то не удалится:
git stash pop
Чтобы изменения оставить в stash’е, можно использовать такую команду:
git stash apply

Теперь парочка команд, которые оторваны от основного workflow.

8. Добавить тег последнему commit’у:
git tag v_0.1-beta
9. Отправить информацию по тегам на сервер:
git push --tags
10. Посмотреть красивое дерево коммитов:
git log --graph --decorate=full --all
11.// тодо: перебароть всё-таки лень и подробнее описать про вишенки
git cherry-pick <commit> -n
12. Посмотреть, какие изменения были внесены определённым commit’ом. Как дополнительная опция — можно указать конкретный файл:
git log -u -1 <commit> [-- <filename>]
13. Аналогично, как и в предыдущем пункте, только для stash’а:
git stash show -p stash@{2}
14. Отменить последний локальный commit. Все изменения из commit’а будут считаться локальными незакомиченными изменениями:
git reset --soft "HEAD^"
15. Создать новую ветку и стразу же перейти на неё:
git checkout -b new_branch_name
16. Удалить ветку:
git branch -d some_branch_name

Этот список постепенно будет дополнятся. Наверное…

А напоследок приведу вам забавный разговор, который однажды случился у меня на работе:
Насяльника: не забудь про ребейз
Юный Падаван: не забуду
Юный Падаван: я вроде как всегда делаю
Насяльника: надо не вроде а точно
Насяльника: в любое время в любом состоянии
Насяльника: на вопрос "что делать после коммита"
Юный Падаван: выпить?
Юный Падаван: :D
Насяльника: ты должен ответить "пул --ребейз"

Комментариев нет:

Отправить комментарий