Работа с GIT

10 декабря 2015 - 18:05
# Поиск по логу
git log --all --grep='Search text'

Прятанье

Если мы сделали какие-то изменения и нам нужно переключиться в другую ветку, а делать коммит рано, можно использовать git stash - команда прячет новые изменения и перемещает указатель HEAD

# Список stash-ей
git stash list
> stash@{0}: WIP on master: 049d078 added the index file
> stash@{1}: WIP on master: c264051... Revert "added file_size"

git stash apply либо конкретную 'заначку' git stash apply stash@{1}
# удаление заначки
git stash drop stash@{1}
# применение сразу с удалением
git stash pop

# Откат изменений (делает патч и зеркально накатывает его)
git stash show -p stash@{0} | git apply -R
git config --global alias.stash-unapply '!git stash show -p | git apply -R'

# Создание ветки из спрятанных изменений
git stash branch testchanges

Ветки/Слияние

# Создать локально ветку из удаленного репозитария и сделать ее отслеживаемой:
git checkout -b [ветка] [удал. сервер]/[ветка]  или git checkout --track [удал. сервер]/[ветка]
# Удаление веток на удалённом сервере:
git push [удал. сервер] :[ветка]
# Переименовать ветку
git branch -m <oldname> <newname>

# Для текущей ветки
git branch -m <newname>

# Слияние только одного коммита
git cherry-pick eb042098a5
# Решение конфликта выбором какую версию использовать
git checkout [--ours|--theirs] file.dat
git add file.dat
git commit -m "Merged conflict"

Теги

#Поставить тег:
git tag -a tag_name -m "Comment"

Переименовать тег:

# Изменяем имя локального тега
git tag new_tag_name old_tag_name
# Удаляем тег
git tag -d old_tag_name

# Удаляем удаленный тег
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old_tag_name

# Добавляем удаленный тег
git push origin --tags - данная команда отправит все теги
git push origin new_tag_name - определенный тег

Сабмодули

# Добавить сабмодуль
git submodule add --branch 7.x-1.x git://git.drupal.org/project/match_redirect.git sites/all/modules/contrib/match_redirect

# Переименовать сабмодуль
git submodule deinit <submodule name>
git rm <submodule folder name>
git submodule add <address to remote git repo> <new folder name>

# Удалить (отредактировав) упоминание о модуле из .gitmodules;
# Удалить из .git/config;
git rm --cached <submodule_path>;
# Закомитить и удалить файлы модуля.

Алиасы

# Утилитой можно задать три уровня видимости:
# git config --system - для всех пользователей системы
# git config --global - для текущего пользователя
# git config - для текущего репозитария
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.hist 'log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short'
# Либо в файле .gitconfig
[alias]
  co = checkout
  ci = commit
  st = status
  br = branch
  hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

Добавление shell алиаса в msysgit:

# Если нет файла .bashrc в папке пользователя создаем его
alias go='git checkout '
alias cdm='cd ../../../../..' - смена директорий из сабмодуля

Ссылки

Категория: