Перейти к содержанию

git

  • Просмотр истории файла. Путь указывается от корня проекта

    git show oldBranch:path/to/file
    
    # открыть состояние файла в vim
    git show oldBranch:www/index.php | vim -c 'set syntax=php' -
    

  • Поиск коммитов, в которых строка была добавлена или удалена

    git log -S deletedFunctionName -- path/to/file
    
    # -p — сразу покажет diff
    git log -p -S deletedFunctionName -- path/to/file
    

  • Восстановить файл или каталог в состояние нужной ветки или ревизии

    git checkout [branchName|hash] -- path/to/file
    # пример
    git checkout a22b1a23 -- www/local/php_interface/init.php
    git restore --source=hash www/local/components/vendor/my.component
    

  • Обновление неактивной локальной ветки master, при этом находясь на другой ветке

    git fetch origin master:master
    # прописать в alias для удобства
    git config --global alias.master 'fetch origin master:master'
    

  • Удалить неиспользуемые remote ветки (те, которые git branch -r). Удалятся только те remote-ветки, для которых нет соответствующих веток в репозитории origin. Например, ветка origin/master не удалится

    git remote prune origin
    

  • Создание веток

    # Создать новую ветку newBranch от другой ветки anotherBranch, переключиться на newBranch
    git switch -c newBranch anotherBranch
    
    # Создать ветку из remote ветки origin/myBranch с соответствующим именем, сделать ветку отслеживающей remote ветку
    git checkout --track origin/myBranch
    git swicth --track origin/myBranch
    

Алиасы

# git in - алиас для вытагивания (fetch) master ветки
git config --global alias.in 'fetch origin master'

# git p - отправка (push) текущей ветки
git config --global alias.p 'push origin HEAD'

Алиасы могут быть:

  • локальные. Хранятся в .git/config. Действуют только в репозитории
  • глобальные. Хранятся в /home/username/.gitconfig. Действуют для конкретного linux пользователя
  • системные. Хранятся в /etc/gitconfig. Действуют для всех linux пользователей

Локальный сервер git

Запуск локального сервера git и вытягивание на проде изменений с локального компа

  • на локальной площадке

    # запуск локального git сервера на дефолтном порту (9418)
    git daemon --reuseaddr --base-path=/hdd/sites/my-site
    
    # проброс remote порта по ssh
    ssh -R 9418:localhost:9418 user@my-server
    

  • на удалённой площадке

    # в папке проекта
    git remote add origin git://localhost:9418/.git
    git fetch origin master
    

git push to gitlab options

Git позволяет передавать опции при выполнении команды push, например, для создания merge request в GitLab. Подробнее в документации.

Отправить ветку newFeature в gitlab, создать merge-request в development, поставить пользователя MyGitlabUser ответственным:

git push origin newFeature \
  -o merge_request.create \
  -o merge_request.target=development \
  -o merge_request.assign="MyGitlabUser"

Некоторые параметры:

  • merge_request.create — создать merge-request.
  • merge_request.target=development — установить ветку назначения development для запроса на слияние.
  • merge_request.assign="user" — назначить пользователя user как ответственного (Assigned).
  • merge_request.remove_source_branch — удалить исходную ветку после слияния.

Алиас для git

Алиас pdev (push to development) отправляет текущую (HEAD) ветку в гитлаб, создаёт merge-request в development, прописывает ответственного:

git config --global alias.pdev "push -o merge_request.create -o merge_request.target=development -o merge_request.assign=\"MyGitlabUser\" origin HEAD"

# вызов алиаса
git pdev