GIT

August 25, 2019

Немного небольших скриптов для ускорения и упрощения работы с GIT под Windows:

1. Удалить все ветки, кроме указанных (master, branch_1, branch_2):

git branch | grep -v -e 'master' -e 'branch_1' -e 'branch_2' | xargs git branch -D

 Немного автоматизации. При использовании git-bash можно в файле %userprofile%\.bashrc написать несколько скриптов.

2. Переключение на ветку, обновление репозитория, подтягивание изменений в ветку (название ветки передается в параметре)

checkout () {
    if [ -z "$1" ]
    then
        echo "branch name is empty"
        return -1;
    fi
    git fetch;
    git checkout $1;
    git pull;
}

3. Расширенный п.1 удалить все ветки кроме мастера и переданной в параметре:

clean_branch () {  # удалить все ветки кроме местера и V18.0
    if [ -z "$1" ]
    then
        echo "branch name is empty"
        return -1;
    fi
    git branch | grep -v -e 'master' -e $1 | xargs git branch -D;
}

4. Удалить локальную ветку и в удаленном репозитории (название передается в параметре):

remove_branch () {  # удалить ветку локально и удаленно
    if [ -z "$1" ]
    then
        echo "branch name is empty"
        return -1;
    fi
    git branch -D $1;

    read -p "Remove on remote? " -n 1 -r
    echo    # (optional) move to a new line

    if [[ $REPLY =~ ^[Yy]$ ]]
    then
        git push --delete origin $1;
    fi
}

5. Сохранить все текущие изменения в Stash:

stash () { git stage -A; git stash; } # сохранить изменения

6. Откатить все изменения:

revert_all () {  # удаляем все изменения
    git checkout .;
}

7. Подмерджить изменения из указанной ветки (у нас версионная ветка начинается с префикса V, поэтому он подставляется автоматически):

merge() { # подсасывает изменения
    if [ -z "$1" ]
    then
        echo "branch name is empty"
        return -1;
    fi
    git fetch;
    git merge origin/V$1;
}

8. Делает коммит, в качестве параметра идет текст коммита. У нас в команде по соглашению первым идет номер ветки, если название ветки отсутсвтует в начале теста, то подставляется название текущей:

commit() { # сохранить изменения
    if [ -z "$1" ]
    then
        echo "commit message is empty";
        return -1;
    fi

    SUBTASK="$(echo $1 | grep -E '^AST-[0-9]{4,}')"; #Смотрим, есть ли номер в комментарии
    if [ -z "$SUBTASK" ]
    then
        SUBTASK="$(git branch | grep '*' | cut -d ' ' -f2): $1"; #если нет, то добавляем от текущей ветки
    fi
    git commit -m "$SUBTASK";
}