Pull to refresh

Git up и все все все

Reading time 2 min
Views 26K
Комманда git up (аналог svn up) добавляется так:
git config --global alias.up '!(git add . && git stash && git pull --rebase >&2) | grep -v "No local changes to save" && git stash pop'

git up при надобности ныкает все ещё незакоммиченные изменения в stash, обновляет локальную ветку до свежайшей и восстанавливает локальные изменения назад. В том числе переносит ещё неотправленные локальные коммиты в самый конец, делая историю линейной как в Subversion, т.е. избегая лишних веток и merge-коммитов.

Если всё прошло гладко (без конфликтов) можно сразу же делать git push. В редких случаях конфликтов (вы и кто-то меняли одну и ту же строку) rebase остановится и далее, конечно, придется разбираться самому и завершать апдейт с помощью git rebase --continue сколько нужно раз и git stash apply чтобы вернуть заныканные изменения.

Есть много аналогов, но в большинстве своем это нелаконичные скрипты. Алиас легко добавить на любом сервере вместе с другими просто вставив в консоль всё это:

# git up
git config --global alias.up '!(git add . && git stash && git pull --rebase >&2) | grep -v "No local changes to save" && git stash pop'

# git in / git out — смотреть какие коммиты придут/уйдут перед выполнением pull/push
git config --global alias.in '!git remote update -p; git log ..@{u}'
git config --global alias.out 'log @{u}..'

# git addremove - добавить в индекс новые файлы/изменения и удалить всё что удалилось
git config --global alias.addremove \!"git add . && git ls-files --deleted | xargs --no-run-if-empty git rm"

# git unstage - убрать всё из индекса (чтобы например добавить/закоммитить сначала что-то другое)
git config --global alias.unstage "reset HEAD --"

# git backup - заархивировать весь локальный репозиторий перед экспериментированием
git config --global alias.backup \!'file=../`git describe`.tar && echo "Creating `readlink -f $file`" && tar cf $file .'

# Просто удобные сокращения
git config --global alias.st "status -sb"
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.bra "branch -a"
git config --global alias.chp cherry-pick
git config --global alias.pr "pull --rebase"
git config --global alias.bl "blame -b -w"
git config --global alias.cia "commit --amend"
git config --global alias.lg "log --pretty=format:'%h was %an, %ar, message: %s' --graph"
git config --global alias.who "shortlog -s --"

# what else?

Делитесь полезными алиасами!
Tags:
Hubs:
+78
Comments 64
Comments Comments 64

Articles