Принятый ответ работает большую часть времени, но если origin / master и master обновлены, rebase ничего не делает, и использование git checkout -
вернет вас в любую предыдущую ветку.
Решениеэто проверка различий между двумя ссылками перед «перебазированием».
Также я думаю, что мы можем сделать его более универсальным, используя псевдоним функции, то есть:
refresh = "!f() { \
git fetch \
&& git diff origin/$1 $1 \
|| { \
git rebase origin/$1 $1 \
&& git checkout - \
;} \
;}; f"
Itпроще определить его непосредственно в файле конфигурации, потому что команда git config
попытается экранировать кавычки и напутать.
Таким образом, вы можете сделать git refresh master
или любую другую ветку. При необходимости вы можете переименовать псевдоним с более коротким именем или использовать двойной псевдоним, чтобы иметь и то и другое, например:
git config --global alias.rf refresh
Хорошая идея для псевдонима, я, безусловно, буду его использовать. Спасибо @ vitalii