Какой самый лучший псевдоним для того, чтобы не вспоминать ветку, в которой я буду тянуть и толкать? - PullRequest
2 голосов
/ 22 июня 2019

Чрезвычайно ленивый здесь, не люблю печатать слишком много и особенно не люблю вспоминать, в какую ветку я вхожу, чтобы тянуть и толкать к. Слишком часто я делаю ошибку, делая git pull из ветки, не являющейся главной, или, что еще хуже, делаю push, и целевая ветвь неверна, и я остаюсь с невыдвинутыми или незафиксированными изменениями.

Я создал в своем .bashrc следующие псевдонимы, чтобы помочь:

alias gitr='git status | grep -Po "On branch \K[^ ]+" | xargs git push origin'

Таким образом, выполнение gitr в любом git-репо подтолкнет зафиксированные изменения в правильную ветку.

Аналогично делать:

alias gitp='git status | grep -Po "On branch \K[^ ]+" | xargs git pull origin'

извлечет последние изменения из правильной ветки, в которой я сейчас нахожусь.

Наконец, этот изменит все локальные изменения как «Косметика» и перенесет их в правильную ветвь:

alias gitcr='git commit -a -m "Cosmetics" && git status | grep -Po "On branch \K[^ ]+" | xargs git push origin'

Есть ли способ распечатать все промежуточные команды без печати в каждой? и есть ли способ сделать эти команды более надежными?

ОБНОВЛЕНИЕ печатью промежуточных команд Я хочу показать следующее, чтобы убедиться, что он выполняет правильные команды:

git status
git pull origin somebranch

Ответы [ 5 ]

2 голосов
/ 22 июня 2019

Как минимум, с Git 2.22 , вы можете использовать:

git branch  --show-current 

Это позволит избежать нескольких grep / awk / sed

Плюс, если вы хотите нажать , вам нужно имя удаленной ветви отслеживания, связанной с текущей веткой (вы могли бы связать удаленную ветку 'bar' с вашей локальной веткой 'foo' '

То есть [<branchname>]@{push}, например master@{push}, @{push}

git rev-parse --abbrev-ref --symbolic-full-name @{push}|cut -d / -f 2

Опять суффикс @{push} сообщает ветку "куда мы нажмем", если будет запущен git push в то время, как проверено branchname.

Примечание: git rev-parse --abbrev-ref --symbolic-full-name @{push}|cut -d / -f 1 даст вам имя пульта, которое не всегда origin.

Это не так же, как [<branchname>]@{upstream}, например master@{upstream}, @{u}.
Суффикс @{upstream} к branchname (краткая форма <branchname>@{u}) относится к ветви, поверх которой настроена ветвь, заданная branchname (настроенная с branch.<name>.remote и branch.<name>.merge).
Т.е. ветку вы тянете от.

См. " Просмотр невыгруженных Git Commits " для обозначения ярлыков Git 2.5+ @{push}.

1 голос
/ 22 июня 2019

Мне нравится использовать git-prompt для решения этой проблемы.Помимо моего имени хоста и текущего пути, мое приглашение всегда показывает, в какой ветке я нахожусь, поэтому сразу становится ясно, что я собираюсь нажать.

https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

1 голос
/ 22 июня 2019

Если вы установите отслеживающую ветвь и установите для push.default значение 'upstream' или подобное, тогда git pull / git push без аргументов будет по умолчанию использовать эту ветвь.

Чтобы установить «push.default», запустите git config --global push.default upstream.

Если вы изначально извлекли ветку с пульта, тогда должна была быть автоматически создана ветка отслеживания.Если вы создали ветку локально, то вы можете создать отслеживающую ветку, включив опцию -u при нажатии:

git push -u <remote> <branch>
1 голос
/ 22 июня 2019

Для быстрого отображения только текущего названия ветви вы можете использовать:

git symbolic-ref --short HEAD
1 голос
/ 22 июня 2019

Вы можете установить псевдонимы git в ~/.gitconfig:

[alias]
    p=!git status && git pull origin $(git branch | sed 's/.* //')
    r=!git status && git push origin $(git branch | sed 's/.* //')

Использование:

$ git branch
  master
* other
$ git p
On branch other
Your branch is up to date with 'origin/other'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...