Если вы хотите выполнить слияние 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) .