Не проверять ветку после ребаз в git - PullRequest
1 голос
/ 24 октября 2019

Я в своей ветке (не master), и мне нужно локально получить последнюю версию master. Далее я продолжаю оставаться в моей ветке:

git fetch
git rebase origin/master master

После этого проверяется master, и мне нужно вернуться в свою ветку. Есть ли способ избежать проверки локального master при ребазе?

Ответы [ 3 ]

2 голосов
/ 24 октября 2019

К сожалению, короткий ответ нет .

Из документа :

Если указано, git rebase выполнитавтоматический выключатель git, прежде чем делать что-либо еще. В противном случае он остается в текущей ветви.

Это то же самое для слияний: вы работаете только с извлеченной веткой для этих операций, так как они там могут привести к конфликтусостояние и затем должно быть разрешено на месте.


Обходным решением будет цепочка (с && для остановки, если rebase возвращает ошибку), последующая проверка обратно в псевдониме.

# fm for "fresh master"
git config --global alias.fm '!git fetch && git rebase origin/master master && git checkout -'
1 голос
/ 24 октября 2019

Принятый ответ работает большую часть времени, но если 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

0 голосов
/ 24 октября 2019

Если вы хотите, чтобы изменения были перенесены в вашу ветку, вам не нужно оформлять заказ master. Вы можете остаться в своей ветке и выполнить -

git fetch

, а затем

git rebase origin/master

. Это приведет к тому, что коммиты из вашего местного филиала будут заменены коммитами с origin/master. Он не будет обновлять ваш локальный master.

...