Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
git_командная строка.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
103 Кб
Скачать
☆

3.4 Git push — вносим изменения в удаленный репозитарий (удаленную ветку)

После проведения работы в экспериментальной ветке, слияния с основной, необходимо обновить удаленный репозитарий (удаленную ветку). Для этого используется команда git push: git push — отправить свои изменения в удаленную ветку, созданную при клонировании по умолчанию. git push ssh://yourserver.com/~you/proj.git master:experimental — отправить изменения из ветки master в ветку experimental удаленного репозитария. git push origin :experimental — в удаленном репозитарии origin удалить ветку experimental. git push origin master:master — в удаленную ветку master репозитария origin (синоним репозитария по умолчанию) ветки локальной ветки master.

4 git-о-день

В этом разделе будут показаны и разобраны подробно несколько обычных и чуть меньше необычных для работы с git ситуаций.

4.1 Обычный workflow при работе с локальным репозитарием

Git обладает необычайной легкостью в использовании не только как распределенная система контроля версий, но и в работе с локальными проектами. Давайте разберем обычный цикл — начиная с создания репозитария — работы разработчика git над собственным персональным проектом:

  1. mkdir git-demo

  2. cd git-demo

  3. git init

  4. git add.

  5. git commit -m «initial commit»

  6. git branch new-feature

  7. git checkout new-feature

  8. git add.

  9. git commit -m «Done with the new feature»

  10. git checkout master

  11. git diff HEAD new-feature

  12. git merge new-feature

  13. git branch -d new-feature

  14. git log --since=«1 day»

Разберем каждое из действий. 1-2 — просто создаем рабочую директорию проекта. 3 — создаем репозитарий в директории. 4 — индексируем все существующие файлы проекта (если, конечно, они вообще были). 5 — создаем инициализирующий коммит. 6 — новая ветка, 7 — переключение в нее (можно сделать в один шаг командой git checkout -b new-feature). Далее, после непосредственной работы с кодом, индексируем внесенные изменения(8), совершаем коммит(9). Переключаемся в основную ветку(10), смотрим отличия между последним коммитом активной ветки и последним коммитом экспериментальной (11). Проводим слияние (12) и, если не было никаких конфликтов, удаляем ненужную больше ветку (13). Ну и на всякий случай оценим проведенную за последний день работу (14). Почему именно так? Зачем отказываться от линейной модели? Хотя бы даже потому, что у программиста появляется дополнительная гибкость: он может переключаться между задачами (ветками); под рукой всегда остается «чистовик» — ветка master; коммиты становятся мельче и точнее.

4.2 Workflow при работе с удаленным репозитарием

Предположим, что вы и несколько ваших напарников создали общественный репозитарий, чтобы заняться неким общим проектом. Как выглядит самая распространенная для git модель общей работы?

  1. git clone http://yourserver.com/~you/proj.git … возможно, прошло некоторое время.

  2. git pull

  3. git diff HEAD^

  4. git checkout -b bad-feature … работаем некоторое время.

  5. git commit -a -m «Created a bad feature»

  6. git checkout master

  7. git pull

  8. git merge bad-feature

  9. git commit -a

  10. git diff HEAD^ … запускаем тесты проекта, обнаруживаем, что где-то произошла ошибка. Упс.

  11. git reset --hard ORIG_HEAD

  12. git checkout bad-feature … исправляем ошибку.

  13. git -m bad-feature good-feature

  14. git commit -a -m «Better feature»

  15. git checkout master

  16. git pull

  17. git merge good-feature

  18. git push

  19. git branch -d good-feature

Итак, первым делом создаем (1) создаем копию удаленного репозитария (по умолчанию команды вроде git pull и git push будут работать с ним). «Вытягиваем» последние обновления (2); смотрим, что же изменилось(3); создаем новую ветвь и переключаемся в нее (4); индексируем все изменения и одновременно создаем из них коммит (5); переключаемся в главную ветвь (6), обновляем ее (7); проводим слияние с веткой bad-feature(8) и, обнаружив и разрешив конфликт, делаем коммит слияния (9). После совершения коммита отслеживаем изменения(10), запускаем, например, юнит-тесты и с ужасом обнаруживаем, что после слияния проект валится на большей части тестов.  В принципе, тесты можно было прогнать и до коммита, в момент слияния (между пунктами 8 и 9); тогда бы хватило «мягкого» резета. Таким образом, приходится совершить «жесткий» (11) сброс произошедшего слияния, ветки вернулись в исходное до состояние. После чего переключаемся в неудачную ветку (12), вносим необходимые изменения и переименовываем ветку (13). Совершаем коммит (14); переходим в главную ветку(15), опять ее обновляем (16). На этот раз бесконфликтно делаем слияние (17), закидываем изменения в удаленный репозитарий (18) и удаляем ненужную теперь ветку (19). Закрываем ноутбук, одеваемся и идем домой под утро.

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]