Сила толчка текущей ветви
Я часто перебираю ветки функций и затем хочу принудительно перенести их на сервер.
git push --force origin feature-mongodb-support
Есть ли ярлык для git push --force origin <current branch>
?
8 ответов
Вы можете использовать псевдонимы, чтобы сократить команду. Используйте это так:
git config --global alias.fpush "push --force origin"
Теперь, чтобы вставить свою ветку, просто наберите:
git fpush feature-mongodb-support
Или вы можете даже жестко закодировать имя ветви в команду:
git alias fpush "push --force origin feature-mongodb-support"
и использовать только git fpush
подтолкнуть вашу драгоценную работу в верхнем течении.
Однако обновления без ускоренной пересылки опасны, поскольку в основном вы перезаписываете всю историю на сервере, которая произошла между последним слиянием / перебазированием в вашу локальную ветку и принудительной отправкой. Если вам нужно делать их часто, в вашем рабочем процессе определенно что-то не так.
Вы можете изменить поведение по умолчанию, установив свойство push.default:
git config --global push.default current
тогда:
git push -f
заставит вас нажать на текущую ветку.
Вот копия / вставка из http://schacon.github.io/git/git-config.html:
push.default
Определяет действие, которое git push должен предпринять, если в командной строке не задано refspec, на удаленном компьютере не настроено refspec и никакие параметры refspec не подразумеваются ни одним из параметров, заданных в командной строке. Возможные значения:
ничего - ничего не нажимайте.
сопоставление - нажать все соответствующие ветви. Все ветви с одинаковыми именами на обоих концах считаются совпадающими. Это значение по умолчанию.
upstream - переместить текущую ветвь в ее восходящую ветвь.
tracking - устаревший синоним апстрима.
current - переместить текущую ветку в ветку с таким же именем.
Прочитав эти ответы и прочитав этот ответ на связанный вопрос ( /questions/7616456/git-psevdonim-na-tekuschej-vetke/7616460#7616460), я создал этот псевдоним, чтобы принудительно нажать на origin
на основе текущего имени ветви:
fp = "!git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
Если вы используете о мой Zsh вы можете просто сделать
ggfl
который сделает это для вас
git push --force-with-lease origin <your_argument>/$(current_branch)
Это должно сделать трюк:
git alias fpush "push --force origin"
Который позволит вам использовать git fpush
как более короткая альтернатива.
Чтобы автоматически принудительно нажать на отслеживаемую ветвь (независимо от ее имени и восходящего потока), я разработал этот псевдоним:
fbrpush=!git push $(git rev-parse --abbrev-ref=loose --symbolic-full-name @{upstream} \
| sed 's:/: +:')
(строка разбита для удобства чтения)
(на основе другого SO ответа)
чтобы расширить хороший ответ @jlleblanc, если вы хотите добавить защиту, чтобы предотвратить принудительное нажатие на мастер (это может быть очень сложно отменить)
[alias]
fp = "!branch=$(git branch --show-current); [[ -z $branch || $branch = 'master' ]] && echo 'Command cannot be used on master branch or when not on branch.' || git push -f origin \"$(git rev-parse --abbrev-ref HEAD)\""
он будет делать то же самое, за исключением того, что если текущая ветка является основной, он пропустит и выведет предупреждение
Текущее имя ветки также может быть выведено автоматически.
Я использую небольшой сценарий оболочки для принудительного нажатия на текущую ветку:
git branch | grep '*' | awk '{print $2}' | xargs -I % git push origin % -f
Команда
git branch
помечает текущую ветку
*
символ, поэтому мы можем получить соответствующую строку с
grep '*'
и проанализируйте его, чтобы получить имя ветки.
Затем команду быстрого доступа можно определить как псевдоним в
.bashrc
или же
.zshrc
:
alias gfp=/path/to/script