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

Материал из Home Wiki
Перейти к навигации Перейти к поиску
Строка 71: Строка 71:
Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен.
Залить с удаленного сервера ветку origin/new-feature, создать локально ветку new-feature (названия могут веток могут различаться, но смысл?) и связать одну с другой. Связывание означает, что команды push и pull будут выполняться по умолчанию в/из origin/new-feature. Второй вариант создаст и привяжет локальную ветку с тем же именем, что и на удаленном сервере. Такой вариант предпочтителен.


<syntaxhighlight lang="bash">
git push origin :new-feature
git push origin :new-feature
 
</syntaxhighlight>
Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно.
Удалить ветку new-feature на удаленном сервере origin. Если работа в данной ветке законченна и она слита с основной рекомендуется удалить ветку локально и удаленно.


<syntaxhighlight lang="bash">
git commit --amend
git commit --amend
 
</syntaxhighlight>
Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п.
Дописать к последнему commit'у все что находится сейчас в stage. Так же можно дополнить сообщение commit'а. Удобно, когда забыл закомитить какой-нибудь конфиг из другой папки и т.п.


<syntaxhighlight lang="bash">
git remote -v
git remote -v
 
</syntaxhighlight>
Показать удаленные репозитарии вместе с их URL.
Показать удаленные репозитарии вместе с их URL.


<syntaxhighlight lang="bash">
git remote show origin
git remote show origin
 
</syntaxhighlight>
Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними.
Показать подробности об удаленном репозитории origin, о всех его ветках и о локальных ветках, связанных с ними.


<syntaxhighlight lang="bash">
git fetch
git fetch
 
</syntaxhighlight>
Подтянуть изменения с удаленного репозитария. Аналог svn-update
Подтянуть изменения с удаленного репозитария. Аналог svn-update


<syntaxhighlight lang="bash">
git push origin --tags
git push origin --tags
 
</syntaxhighlight>
Залить все теги на удаленный репозитарий.
Залить все теги на удаленный репозитарий.


<syntaxhighlight lang="bash">
git add
git add
 
<syntaxhighlight lang="bash">
Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.
Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.


<syntaxhighlight lang="bash">
git checkout -- .
git checkout -- .
 
</syntaxhighlight>
Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert.
Точка здесь путь до текущей директории. Откатить все изменения внесенные в файлы до коммита. Аналог svn-revert.


<syntaxhighlight lang="bash">
git config --global core.edition mcedit
git config --global core.edition mcedit
 
</syntaxhighlight>
Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе.
Сделать редактором сообщений для коммитов mcedit. Опция пременится глобально во всей системе.


<syntaxhighlight lang="bash">
git help <команда>
git help <команда>
 
</syntaxhighlight>
Выдаст страницу справки по интересующей команде
Выдаст страницу справки по интересующей команде


<syntaxhighlight lang="bash">
git config --global alias.br branch
git config --global alias.br branch
 
</syntaxhighlight>
Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п. Часто используемые алиасы:
Создать глобальный псевдоним br для команды branch. Теперь можно будет писать git br для вызова этой команды. Алиасы работают не только на простую команду, но и в принципе на любую сложную команду с ключами, настройками и т.п. Часто используемые алиасы:


<syntaxhighlight lang="bash">
git config --global alias.st status
git config --global alias.st status


Строка 128: Строка 140:


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 lang="bash">
git add -i
git add -i
 
</syntaxhighlight>
Вызвать интерактивный режим работы с файлами
Вызвать интерактивный режим работы с файлами


<syntaxhighlight lang="bash">
git log --summary -n1
git log --summary -n1
 
</syntaxhighlight>
Выдаст изменения в файлах, сделанные последним коммитом
Выдаст изменения в файлах, сделанные последним коммитом


<syntaxhighlight lang="bash">
git log -p FILENAME
git log -p FILENAME
 
</syntaxhighlight>
Получить подробную информацию в виде патчей о каждом изменении конкретного файла ''FILENAME''
Получить подробную информацию в виде патчей о каждом изменении конкретного файла ''FILENAME''


<syntaxhighlight lang="bash">
git reset --hard origin/develop
git reset --hard origin/develop
 
</syntaxhighlight>
Отмена не запушеного мёрджа с веткой ''develop''
Отмена не запушеного мёрджа с веткой ''develop''


<syntaxhighlight lang="bash">
git reset
git reset


git checkout -- .
git checkout -- .
 
</syntaxhighlight>
Откатить все изменнения до последнего коммита
Откатить все изменнения до последнего коммита


<syntaxhighlight lang="bash">
git push -u origin paysys-start
git push -u origin paysys-start
 
</syntaxhighlight>
Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u
Создал новую ветку paysys-start и нужно залить ее на сервер, попутно привязав push и pull команды - поможет ключ -u


<syntaxhighlight lang="bash">
git remote prune origin
git remote prune origin
 
</syntaxhighlight>
Удаляет указатель на несуществующую ветку на origin
Удаляет указатель на несуществующую ветку на origin


<syntaxhighlight lang="bash">
git diff
git diff


git diff HEAD
git diff HEAD
 
</syntaxhighlight>
Показывает разность файлов между коммитом и текущей версией бранча
Показывает разность файлов между коммитом и текущей версией бранча


<syntaxhighlight lang="bash">
git diff origin/master
git diff origin/master
</syntaxhighlight>


Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
Показывает разность файлов между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)


<syntaxhighlight lang="bash">
git diff origin/master -- paymentManager.php
git diff origin/master -- paymentManager.php
 
</syntaxhighlight>
Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)
Показывает разность файла между локальной копией и удаленной копией (т.е. те изменения которые отправятся на сервер при команде git push)


<syntaxhighlight lang="bash">
git br -m 2nd-level-menu jdo-on-web
git br -m 2nd-level-menu jdo-on-web
</syntaxhighlight>


Переименовать ветку
Переименовать ветку
Строка 194: Строка 219:


'''Если вы работаете не в том branch'е и хотите свои изменения закоммитить в новый/другой существующий branch:'''
'''Если вы работаете не в том branch'е и хотите свои изменения закоммитить в новый/другой существующий branch:'''
 
<syntaxhighlight lang="bash">
git stash
git stash


Строка 200: Строка 225:


git stash pop
git stash pop
</syntaxhighlight>


Здесь:
Здесь:


git stash
git stash - сохранить текущие незакомиченные изменения в виде патча в стек и сбросить текущую ветку до HEAD


- сохранить текущие незакомиченные изменения в виде патча в стек и сбросить текущую ветку до HEAD
git checkout -b new-branch - Создать новую ветку и переключиться в неё. Если ветку создавать не надо, убираем -b


git checkout -b new-branch
git stash pop - применяем последний сохранённый патч из стека и удаляем его из стека
 
- Создать новую ветку и переключиться в неё. Если ветку создавать не надо, убираем -b
 
git stash pop


- применяем последний сохранённый патч из стека и удаляем его из стека
git merge --abort


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



Версия 06:09, 13 января 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

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

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
<syntaxhighlight lang="bash">
Помимо добавления измененых файлов в stage, так же используется для пометки файлов после разрешения конфликтов.

<syntaxhighlight lang="bash">
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-file-lifestatus.png

Git-local-operations.png

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

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

Ссылки

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