У меня есть частное репо на сервере, и я регулярно перебираю / принудительно отправляю на него, что заставляет часто перезагружать локальную ветку на моем другом компьютере. Поэтому я создал следующий псевдоним "catchup", который позволяет делать это для текущей ветви. В отличие от другого ответа в этом псевдониме нет жестко закодированного имени ветви.
Держись крепче.
[alias]
catchup = "!f(){ echo -n \"reset \\033[0;33m$(git symbolic-ref -q --short HEAD)\\033[0m to \\033[0;33m$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))\\033[0m? (Y/n) \"; read -r ans; if [ \"$ans\" = \"y\" -o \"$ans\" = \"Y\" -o -z \"$ans\" ]; then git reset --hard $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)); else echo \"catchup aborted\"; fi }; f"
Правильно отформатированный (не будет работать с символами новой строки в .gitconfig) это выглядит так:
"
!f(){
echo -n \"reset \\033[0;33m$(git symbolic-ref -q --short HEAD)\\033[0m to \\033[0;33m$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))\\033[0m? (Y/n) \";
read -r ans;
if [ \"$ans\" = \"y\" -o \"$ans\" = \"Y\" -o -z \"$ans\" ]; then
git reset --hard $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD));
else
echo \"catchup aborted\";
fi
}; f
"
-
\\033[0;33m
и \\033[0m
предназначены для выделения текущей ветви и восходящего потока цветом.
$(git symbolic-ref -q --short HEAD)
- текущее имя ветви
$(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD))
является восходящим потоком текущей ветви.
Поскольку сброс - это потенциально опасный вызов (особенно с параметром --hard, вы потеряете все незафиксированные изменения), он сначала сообщает вам, что он собирается делать. Например, если вы находитесь на ветке dev-container с удаленным именем qcpp / dev-container и вводите git catchup
, вам будет предложено:
сбросить dev-container в qcpp / dev-container? (Y / N)
Если вы затем наберете y или просто нажмете return, произойдет сброс. Если вы введете что-либо еще, сброс не будет выполнен.
Если вы хотите быть сверхбезопасным и программно предотвратить потерю неустановленных / незафиксированных изменений, вы можете дополнительно увеличить указанный выше псевдоним с помощью в соответствии с проверками diff-index .
Обязательное предупреждение: если вы работаете с публичным хранилищем, на котором работают другие люди, и вам нужен этот псевдоним, вы делаете это неправильно ™ .