Git: различия между версиями
FireWolf (обсуждение | вклад) (Новая страница: «= Модель flow = = Набор команд необходимый для выполнения такого flow = = Разные команды = = Сос…») |
FireWolf (обсуждение | вклад) |
||
Строка 2: | Строка 2: | ||
= Набор команд необходимый для выполнения такого flow = | = Набор команд необходимый для выполнения такого flow = | ||
1. Начало работы над какой-нибудь новой функциональностью. Создается отдельная ветка на фичу на основе develop | |||
git checkout -b new-feature develop | |||
2. Добавление в очередь на коммит и коммитим внутри ветки | |||
git add . | |||
git commit -am "Commit message" | |||
3. Заливаем на удаленный сервер вновь созданную ветку | |||
git push -u origin new-feature | |||
4. Закончив разработку переключаемся в develop и мерджим изменения. | |||
git checkout develop | |||
git merge --no-ff new-feature | |||
5. Отправляем изменения в удаленный репозитарий | |||
git push | |||
6. Удаляем ветку | |||
git branch -d new-feature | |||
7. Удаляем ветку и ссылку на нее в удаленном репозитарии | |||
git push origin :new-feature | |||
git remote prune origin | |||
8. Проставление тега у релиза и отправляем его в удаленный репозитарий | |||
git tag -a v1.2 | |||
git push origin --tags | |||
= Разные команды = | = Разные команды = | ||
git branch --merge | |||
Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop. | |||
git branch --no-merge | |||
Посмотреть список бранчей, с которыми у текущей не было merge'ей. Ищутся кандидаты на слияние. | |||
git fetch origin (либо имя другого репозитария) | |||
Синхронизировать проект с удаленным репозитарием. | |||
git checkout -b new-feature origin/new-feature | |||
git checkout --track origin/new-feature | |||
Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен. | |||
git push origin :new-feature | |||
Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно. | |||
git commit --amend | |||
Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п. | |||
git remote -v | |||
Показать удаленные репозитарии вместе с их URL. | |||
git remote show origin | |||
Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними. | |||
git fetch | |||
Подтянуть изменения с удаленного репозитария. Аналог svn-update | |||
git push origin --tags | |||
Залить все теги на удаленный репозитарий. | |||
git add | |||
Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов. | |||
git checkout -- . | |||
Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert. | |||
git config --global core.edition mcedit | |||
Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе. | |||
git help <команда> | |||
Выдаст страницу справки по интересующей команде | |||
git config --global alias.br branch | |||
Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п. Часто используемые алиасы: | |||
git config --global alias.st status | |||
git config --global alias.br branch | |||
git config --global alias.co checkout | |||
git config --global alias.ci commit | |||
git config --global alias.me merge | |||
git log --graph --pretty=oneline | |||
git log --graph --pretty=format:'%Cred%h%Creset \-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \--abbrev-commit --date=relative | |||
Выведет структуру коммитов, слияний и т.д. с сообщениями. | |||
git add -i | |||
Вызвать интерактивный режим работы с файлами | |||
git log --summary -n1 | |||
Выдаст изменения в файлах, сделанные последним коммитом | |||
git log -p FILENAME | |||
Получить подробную информацию в виде патчей о каждом изменении конкретного файла ''FILENAME'' | |||
git reset --hard origin/develop | |||
Отмена не запушеного мёрджа с веткой ''develop'' | |||
git reset | |||
git checkout -- . | |||
Откатить все изменнения до последнего коммита | |||
git push -u origin paysys-start | |||
Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u | |||
git remote prune origin | |||
Удаляет указатель на несуществующую ветку на origin | |||
git diff | |||
git diff HEAD | |||
Показывает разность файлов между коммитом и текущей версией бранча | |||
git diff origin/master | |||
Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push) | |||
git diff origin/master -- paymentManager.php | |||
Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push) | |||
git br -m 2nd-level-menu jdo-on-web | |||
Переименовать ветку | |||
Пометить как улаженный | |||
git checkout has the --ours option to check out the version of the file that you had locally (as opposed to --theirs, which is the version that you pulled in). | |||
You can pass . to git checkout to tell it to check out everything in the tree. | |||
Then you need to mark the conflicts as resolved, which you can do with git add, and commit your work once done: | |||
git checkout --ours . # checkout our local version of all files | |||
git add -u # mark all conflicted files as merged | |||
git commit # commit the merge | |||
'''Если вы работаете не в том branch'е и хотите свои изменения закоммитить в новый/другой существующий branch:''' | |||
git stash | |||
git checkout -b new-branch | |||
git stash pop | |||
Здесь: | |||
git stash | |||
- сохранить текущие незакомиченные изменения в виде патча в стек и сбросить текущую ветку до HEAD | |||
git checkout -b new-branch | |||
- Создать новую ветку и переключиться в неё. Если ветку создавать не надо, убираем -b | |||
git stash pop | |||
- применяем последний сохранённый патч из стека и удаляем его из стека | |||
git merge --abort | |||
или | |||
git reset --hard HEAD | |||
отмена конфликта во время merge, с которым вы не можете разобраться и хотите вернуть все назад | |||
= Состояния файла в git = | = Состояния файла в git = |
Версия 05:53, 13 января 2017
Модель flow
Набор команд необходимый для выполнения такого flow
1. Начало работы над какой-нибудь новой функциональностью. Создается отдельная ветка на фичу на основе develop
git checkout -b new-feature develop
2. Добавление в очередь на коммит и коммитим внутри ветки
git add .
git commit -am "Commit message"
3. Заливаем на удаленный сервер вновь созданную ветку
git push -u origin new-feature
4. Закончив разработку переключаемся в develop и мерджим изменения.
git checkout develop
git merge --no-ff new-feature
5. Отправляем изменения в удаленный репозитарий
git push
6. Удаляем ветку
git branch -d new-feature
7. Удаляем ветку и ссылку на нее в удаленном репозитарии
git push origin :new-feature
git remote prune origin
8. Проставление тега у релиза и отправляем его в удаленный репозитарий
git tag -a v1.2
git push origin --tags
Разные команды
git branch --merge
Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop.
git branch --no-merge
Посмотреть список бранчей, с которыми у текущей не было merge'ей. Ищутся кандидаты на слияние.
git fetch origin (либо имя другого репозитария)
Синхронизировать проект с удаленным репозитарием.
git checkout -b new-feature origin/new-feature
git checkout --track origin/new-feature
Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен.
git push origin :new-feature
Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно.
git commit --amend
Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п.
git remote -v
Показать удаленные репозитарии вместе с их URL.
git remote show origin
Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними.
git fetch
Подтянуть изменения с удаленного репозитария. Аналог svn-update
git push origin --tags
Залить все теги на удаленный репозитарий.
git add
Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.
git checkout -- .
Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert.
git config --global core.edition mcedit
Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе.
git help <команда>
Выдаст страницу справки по интересующей команде
git config --global alias.br branch
Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п. Часто используемые алиасы:
git config --global alias.st status
git config --global alias.br branch
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.me merge
git log --graph --pretty=oneline
git log --graph --pretty=format:'%Cred%h%Creset \-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \--abbrev-commit --date=relative
Выведет структуру коммитов, слияний и т.д. с сообщениями.
git add -i
Вызвать интерактивный режим работы с файлами
git log --summary -n1
Выдаст изменения в файлах, сделанные последним коммитом
git log -p FILENAME
Получить подробную информацию в виде патчей о каждом изменении конкретного файла FILENAME
git reset --hard origin/develop
Отмена не запушеного мёрджа с веткой develop
git reset
git checkout -- .
Откатить все изменнения до последнего коммита
git push -u origin paysys-start
Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u
git remote prune origin
Удаляет указатель на несуществующую ветку на origin
git diff
git diff HEAD
Показывает разность файлов между коммитом и текущей версией бранча
git diff origin/master
Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
git diff origin/master -- paymentManager.php
Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
git br -m 2nd-level-menu jdo-on-web
Переименовать ветку
Пометить как улаженный
git checkout has the --ours option to check out the version of the file that you had locally (as opposed to --theirs, which is the version that you pulled in).
You can pass . to git checkout to tell it to check out everything in the tree.
Then you need to mark the conflicts as resolved, which you can do with git add, and commit your work once done:
git checkout --ours . # checkout our local version of all files
git add -u # mark all conflicted files as merged
git commit # commit the merge
Если вы работаете не в том branch'е и хотите свои изменения закоммитить в новый/другой существующий branch:
git stash
git checkout -b new-branch
git stash pop
Здесь:
git stash
- сохранить текущие незакомиченные изменения в виде патча в стек и сбросить текущую ветку до HEAD
git checkout -b new-branch
- Создать новую ветку и переключиться в неё. Если ветку создавать не надо, убираем -b
git stash pop
- применяем последний сохранённый патч из стека и удаляем его из стека
git merge --abort
или
git reset --hard HEAD
отмена конфликта во время merge, с которым вы не можете разобраться и хотите вернуть все назад
Состояния файла в git
Децентрализованный, но централизованный
Ссылки
HOWTO по Git: http://githowto.com/ru