Сила толчка текущей ветви

Я часто перебираю ветки функций и затем хочу принудительно перенести их на сервер.

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)

https://github.com/robbyrussell/oh-my-zsh/wiki/Cheatsheet

Это должно сделать трюк:

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
Другие вопросы по тегам