Git: различия между версиями

Материал из Home Wiki
Перейти к навигации Перейти к поиску
 
(не показаны 2 промежуточные версии этого же участника)
Строка 4: Строка 4:
[[Файл:Git-flow.png|Git flow]]
[[Файл:Git-flow.png|Git flow]]
= Набор команд необходимый для выполнения такого flow =
= Набор команд необходимый для выполнения такого flow =
1. Начало работы над какой-нибудь новой функциональностью. Создается отдельная ветка на фичу на основе develop<syntaxhighlight lang="bash">
# Начало работы над какой-нибудь новой функциональностью. Создается отдельная ветка на фичу на основе develop<syntaxhighlight lang="bash">
git checkout -b new-feature develop
git checkout -b new-feature develop
</syntaxhighlight>
</syntaxhighlight>
 
# Добавление в очередь на коммит и коммитим внутри ветки<syntaxhighlight lang="bash">
2. Добавление в очередь на коммит и коммитим внутри ветки<syntaxhighlight lang="bash">
git add .
git add .


git commit -am "Commit message"
git commit -am "Commit message"
</syntaxhighlight>
</syntaxhighlight>
 
# Заливаем на удаленный сервер вновь созданную ветку<syntaxhighlight lang="bash">
3. Заливаем на удаленный сервер вновь созданную ветку
 
git push -u origin new-feature
git push -u origin new-feature
 
</syntaxhighlight>
4. Закончив разработку переключаемся в develop и мерджим изменения.<syntaxhighlight lang="bash">
# Закончив разработку переключаемся в develop и мерджим изменения.<syntaxhighlight lang="bash">
 
git checkout develop
git checkout develop


git merge --no-ff new-feature
git merge --no-ff new-feature
</syntaxhighlight>
</syntaxhighlight>
 
# Отправляем изменения в удаленный репозитарий<syntaxhighlight lang="bash">
5. Отправляем изменения в удаленный репозитарий<syntaxhighlight lang="bash">
 
git push
git push
</syntaxhighlight>
</syntaxhighlight>
 
# Удаляем ветку<syntaxhighlight lang="bash">
6. Удаляем ветку<syntaxhighlight lang="bash">
 
git branch -d new-feature
git branch -d new-feature
</syntaxhighlight>
</syntaxhighlight>
 
# Удаляем ветку и ссылку на нее в удаленном репозитарии<syntaxhighlight lang="bash">
7. Удаляем ветку и ссылку на нее в удаленном репозитарии<syntaxhighlight lang="bash">
 
git push origin :new-feature
git push origin :new-feature


git remote prune origin
git remote prune origin
</syntaxhighlight>
</syntaxhighlight>
 
# Проставление тега у релиза и отправляем его в удаленный репозитарий<syntaxhighlight lang="bash">
8. Проставление тега у релиза и отправляем его в удаленный репозитарий<syntaxhighlight lang="bash">


git tag -a v1.2
git tag -a v1.2
Строка 51: Строка 40:
= Разные команды =
= Разные команды =


<syntaxhighlight lang="bash">
# Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop.<syntaxhighlight lang="bash">
git branch --merge
git branch --merge
</syntaxhighlight>
</syntaxhighlight>
Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop.
# Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop.<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git branch --no-merge
git branch --no-merge
</syntaxhighlight>
</syntaxhighlight>
Посмотреть список бранчей, с которыми у текущей не было merge'ей. Ищутся кандидаты на слияние.
# Синхронизировать проект с удаленным репозитарием.<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git fetch origin (либо имя другого репозитария)
git fetch origin (либо имя другого репозитария)
</syntaxhighlight>
</syntaxhighlight>
Синхронизировать проект с удаленным репозитарием.
# Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен.<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git checkout -b new-feature origin/new-feature
git checkout -b new-feature origin/new-feature


git checkout --track origin/new-feature
git checkout --track origin/new-feature
</syntaxhighlight>
</syntaxhighlight>
Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен.
# Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git push origin :new-feature
git push origin :new-feature
</syntaxhighlight>
</syntaxhighlight>
Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно.
# Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git commit --amend
git commit --amend
</syntaxhighlight>
</syntaxhighlight>
Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п.
# Показать удаленные репозитарии вместе с их URL. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git remote -v
git remote -v
</syntaxhighlight>
</syntaxhighlight>
Показать удаленные репозитарии вместе с их URL.
# Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git remote show origin
git remote show origin
</syntaxhighlight>
</syntaxhighlight>
Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними.
# Подтянуть изменения с удаленного репозитария. Аналог svn-update <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git fetch
git fetch
</syntaxhighlight>
</syntaxhighlight>
Подтянуть изменения с удаленного репозитария. Аналог svn-update
# Залить все теги на удаленный репозитарий. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git push origin --tags
git push origin --tags
</syntaxhighlight>
</syntaxhighlight>
Залить все теги на удаленный репозитарий.
# Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git add
git add
</syntaxhighlight>
</syntaxhighlight>
Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.
# Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git checkout -- .
git checkout -- .
</syntaxhighlight>
</syntaxhighlight>
Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert.
# Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git config --global core.edition mcedit
git config --global core.edition mcedit
</syntaxhighlight>
</syntaxhighlight>
Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе.
# Выдаст страницу справки по интересующей команде <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git help <команда>
git help <команда>
</syntaxhighlight>
</syntaxhighlight>
Выдаст страницу справки по интересующей команде
# Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п. <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git config --global alias.br branch
git config --global alias.br branch
</syntaxhighlight>
</syntaxhighlight>
Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п. Часто используемые алиасы:
# Часто используемые алиасы: <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git config --global alias.st status
git config --global alias.st status


Строка 138: Строка 97:


git config --global alias.me merge
git config --global alias.me merge
 
</syntaxhighlight>
# Выведет структуру коммитов, слияний и т.д. с сообщениями. <syntaxhighlight lang="bash">
git log --graph --pretty=oneline
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 log --graph --pretty=format:'%Cred%h%Creset \-%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \--abbrev-commit --date=relative
</syntaxhighlight>
</syntaxhighlight>
Выведет структуру коммитов, слияний и т.д. с сообщениями.
# Вызвать интерактивный режим работы с файлами <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git add -i
git add -i
</syntaxhighlight>
</syntaxhighlight>
Вызвать интерактивный режим работы с файлами
# Выдаст изменения в файлах, сделанные последним коммитом <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git log --summary -n1
git log --summary -n1
</syntaxhighlight>
</syntaxhighlight>
Выдаст изменения в файлах, сделанные последним коммитом
# Получить подробную информацию в виде патчей о каждом изменении конкретного файла ''FILENAME'' <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git log -p FILENAME
git log -p FILENAME
</syntaxhighlight>
</syntaxhighlight>
Получить подробную информацию в виде патчей о каждом изменении конкретного файла ''FILENAME''
# Отмена не запушеного мёрджа с веткой ''develop'' <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git reset --hard origin/develop
git reset --hard origin/develop
</syntaxhighlight>
</syntaxhighlight>
Отмена не запушеного мёрджа с веткой ''develop''
# Откатить все изменнения до последнего коммита <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git reset
git reset


git checkout -- .
git checkout -- .
</syntaxhighlight>
</syntaxhighlight>
Откатить все изменнения до последнего коммита
# Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git push -u origin paysys-start
git push -u origin paysys-start
</syntaxhighlight>
</syntaxhighlight>
Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u
# Удаляет указатель на несуществующую ветку на origin <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git remote prune origin
git remote prune origin
</syntaxhighlight>
</syntaxhighlight>
Удаляет указатель на несуществующую ветку на origin
# Показывает разность файлов между коммитом и текущей версией бранча <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git diff
git diff


git diff HEAD
git diff HEAD
</syntaxhighlight>
</syntaxhighlight>
Показывает разность файлов между коммитом и текущей версией бранча
# Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push) <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git diff origin/master
git diff origin/master
</syntaxhighlight>
</syntaxhighlight>
 
# Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push) <syntaxhighlight lang="bash">
Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
 
<syntaxhighlight lang="bash">
git diff origin/master -- paymentManager.php
git diff origin/master -- paymentManager.php
</syntaxhighlight>
</syntaxhighlight>
Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
# Переименовать ветку <syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
git br -m 2nd-level-menu jdo-on-web
git br -m 2nd-level-menu jdo-on-web
</syntaxhighlight>
</syntaxhighlight>
 
# Поправить сообщение последнего коммита <syntaxhighlight lang="bash">
Переименовать ветку
git commit --amend
</syntaxhighlight>


Пометить как улаженный
Пометить как улаженный
Строка 238: Строка 176:




<syntaxhighlight lang="bash">git merge --abort</syntaxhighlight>
<syntaxhighlight lang="bash">git merge --abort
или
## или
<syntaxhighlight lang="bash">git reset --hard HEAD</syntaxhighlight>
git reset --hard HEAD</syntaxhighlight>
отмена конфликта во время merge, с которым вы не можете разобраться и хотите вернуть все назад
отмена конфликта во время merge, с которым вы не можете разобраться и хотите вернуть все назад



Текущая версия на 09:55, 7 февраля 2017

Категория:Работа

Модель flow

Git 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
    

Разные команды

  1. Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop.
    git branch --merge
    
  2. Посмотреть список бранчей, с которыми происходили merge'и у текущей. Полезно для поиска тех бранчей, которые нужно удалить, так как работа в них больше не ведется и все их изменения уже находятся в текущей ветке. Например посмотреть как называется ветка фичи, которую уже залили в develop.
    git branch --no-merge
    
  3. Синхронизировать проект с удаленным репозитарием.
    git fetch origin (либо имя другого репозитария)
    
  4. Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен.
    git checkout -b new-feature origin/new-feature
    
    git checkout --track origin/new-feature
    
  5. Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно.
    git push origin :new-feature
    
  6. Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п.
    git commit --amend
    
  7. Показать удаленные репозитарии вместе с их URL.
    git remote -v
    
  8. Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними.
    git remote show origin
    
  9. Подтянуть изменения с удаленного репозитария. Аналог svn-update
    git fetch
    
  10. Залить все теги на удаленный репозитарий.
    git push origin --tags
    
  11. Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.
    git add
    
  12. Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert.
    git checkout -- .
    
  13. Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе.
    git config --global core.edition mcedit
    
  14. Выдаст страницу справки по интересующей команде
    git help <команда>
    
  15. Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п.
    git config --global alias.br branch
    
  16. Часто используемые алиасы:
    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
    
  17. Выведет структуру коммитов, слияний и т.д. с сообщениями.
    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
    
  18. Вызвать интерактивный режим работы с файлами
    git add -i
    
  19. Выдаст изменения в файлах, сделанные последним коммитом
    git log --summary -n1
    
  20. Получить подробную информацию в виде патчей о каждом изменении конкретного файла FILENAME
    git log -p FILENAME
    
  21. Отмена не запушеного мёрджа с веткой develop
    git reset --hard origin/develop
    
  22. Откатить все изменнения до последнего коммита
    git reset
    
    git checkout -- .
    
  23. Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u
    git push -u origin paysys-start
    
  24. Удаляет указатель на несуществующую ветку на origin
    git remote prune origin
    
  25. Показывает разность файлов между коммитом и текущей версией бранча
    git diff
    
    git diff HEAD
    
  26. Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
    git diff origin/master
    
  27. Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
    git diff origin/master -- paymentManager.php
    
  28. Переименовать ветку
    git br -m 2nd-level-menu jdo-on-web
    
  29. Поправить сообщение последнего коммита
    git commit --amend
    

Пометить как улаженный

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-file-lifestatus.png

Git-local-operations.png

Децентрализованный, но централизованный

Децентраллизованный

Ссылки

HOWTO по Git: http://githowto.com/ru