Git слиться с мастером без проверки на мастер - PullRequest
0 голосов
/ 30 января 2019

Каждый раз, когда мне нужно merge develop с master, я делаю:

git checkout master

git merge develop

Иногда я забываю переключитьсяиз master.Из-за этого я по ошибке делаю изменения в коде, пока все еще на master.Это может быть грязно.Я совершил master несколько раз по ошибке.

Есть ли способ с merge на master без предварительного переключения на master?

Ответы [ 4 ]

0 голосов
/ 31 января 2019

Вы можете попробовать выполнить команду с именем git graft, предоставив git-extras.

Это не совсем команда git, но git-extras предоставляет набор инструментов для работы с git-репозиториями.

В вашем случае git graft develop master может дать вам результат, который вы ищете.

0 голосов
/ 30 января 2019

Если вы хотите выполнить слияние real с master, нет.Реальное слияние требует, по крайней мере, потенциально, рабочего дерева, в котором можно выполнять работу.Он также использует индекс, который должен соответствовать текущей ветви вокруг операции (см. git worktree add метод ниже).

Если вы хотите выполнить операцию fast-forward (не фактическое слияние), это возможно.Например:

git push . develop:master

(обратите внимание на отсутствие знака + или опции --force) будет пытаться перемотать ваш master на тот же коммит, что и ваш develop.Используйте HEAD для обозначения текущей ветви:

git push . HEAD:master

Они работают только в том случае, если возможна перемотка вперед.Если нет, вы получите ошибку в форме:

 ! [rejected]              [name] -> master (non-fast-forward)

, которая говорит вам, что вам нужно рабочее дерево с ветвью master, в котором нужно запустить git merge.

Чтобы сделать это, не изменяя ветвь вашего текущего рабочего дерева, используйте git worktree add, если ваш Git не менее 2,5 (предпочтительно не менее 2,15).Например, предположим, что вы находитесь на верхнем уровне своего хранилища, в ветви feature/X:

git worktree add ../master   # NB: assumes ../master is available as a directory name
cd ../master
git merge feature/X
...                 # do what it takes to complete the merge here

cd -                # return to your main repository
rm -rf ../master    # remove added worktree
git worktree prune  # clean up list of added worktrees

У добавленного рабочего дерева есть свой собственный индекс (и собственный HEAD), поэтому git mergeтеперь имеет индекс и рабочее дерево, в котором можно выполнить свою работу, или оставьте свой беспорядок для исправления, в зависимости от того, что действительно происходит (см. комментарий kostix) .

0 голосов
/ 30 января 2019

псевдоним git, который объединяет текущую ветку с ведущей и возвращает к текущей ветке:

git config alias.merge2master '!curbr=$(git rev-parse --abbrev-ref HEAD) && git checkout master && git merge $curbr && git checkout -'

Назовите его как git merge2master.Чтобы сделать его полностью параметризованным:

git config alias.merge-to '!f() { !curbr=$(git rev-parse --abbrev-ref HEAD) && destbr="{$1:-master}" && git checkout $destbr && git merge $curbr && git checkout -; }; f'

Назовите его git merge-to или git merge-to somebranch.По умолчанию master

0 голосов
/ 30 января 2019

Нет.

Полагаю, вы могли бы написать небольшой скрипт оболочки для выполнения трех шагов:

#!/bin/sh
set -e
git checkout master
git merge develop
git checkout develop

Возможно, вы также захотите добавить git push origin master перед последней проверкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...