Как объединить текущую ветку в другую ветку



у меня есть две ветви, master и dev. Я всегда работаю над dev и только проверяю код в главной ветви, как только он был одобрен для использования в производстве. Когда я делаю это, я должен сделать следующее:



git checkout master
git merge dev
git checkout dev


это ужасно многословно, и поскольку я делаю это часто, я хотел бы свести его к минимуму. Есть ли какая-либо одна команда git, которую я могу использовать для слияния с моей текущей веткой dev на другой ветвь master без необходимости сначала проверять главную ветвь? Что-то может например:



git merge dev to master


было бы круто. Я просмотрел документацию git и ничего не увидел.

613   7  

7 ответов:

1. добавьте удаленный псевдоним для вашего локального репозитория, например:

git remote add self file:///path/to/your/repository

(или на windows git remote add self C:\path\to\your\repository)

2. нажмите на пульт дистанционного управления, например:

git push self dev:master

текущий ответ с самым высоким голосованием от @zerome является хорошим, но немного бесполезно многословным.

в базе вашего git РЕПО вы можете просто сделать это:git push . dev:master

более обобщенное решение, которое будет работать в любом месте в дереве будет:

git push $(git rev-parse --show-toplevel) dev:master

лучше всего было бы просто использовать псевдоним, помещенный в ваш глобальный gitconfig (~/.gitconfig):

[alias]
    merge-to = "!f() { git checkout  && git merge  && git checkout -; }; f"

, Так что вы можете вызывать его из любого репозитория как

git merge-to master dev

небольшая модификация из псевдонима Jefromi, которая не требует ввода в текущей ветке.

значит вы используете его как: git merge-to dev.

это переключится на dev ветвь, объединить его с текущим, а затем переключится обратно.

например, предполагая, что вы находитесь на master филиал, он объединит мастера в dev, и вы все равно будете на мастере.

это определенно идет в мои dotfiles :)

[alias]
  merge-to = "!gitmergeto() { export tmp_branch=`git branch | grep '* ' | tr -d '* '` && git checkout  && git merge $tmp_branch && git checkout $tmp_branch; unset tmp_branch; }; gitmergeto"

Это старый, но...

объединение решений от @kevin-lyda и @dmytrii-nagirniak выше. этот псевдоним объединяет текущую ветвь в указанную ветвь. Он использует метод remotes и использует команды git для получения контекста.

[alias]
    merge-to = "!gitmergeto() { git push \"`git rev-parse --show-toplevel`\" `git rev-parse --abbrev-ref HEAD`:; } && gitmergeto"

для использования как:

git merge-to other-branch-name

чтобы объединить текущую ветвь в другую ветвь, не проверяя другую ветвь:

перемотка вперед сливаться

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

git branch -f master dev

предостережения: это предполагает, что master указывает на фиксацию, которая также находится в dev филиала или некоторые другая ветка. Если это не так, вы рискуете потерять работу! в отличие от git merge который будет создавать слияние фиксации (или жаловаться), когда быстрая перемотка вперед невозможна, этот метод молча сил указатель ветви для указания на другую фиксацию.

это также предполагает, что вы единственный, кто работает над РЕПО, и/или вы знаете, что делаете.

Совет: если ты git fetch и у вас есть новые коммиты в origin/master, вы можете двигай master филиал без проверки с помощью:

git branch -f master origin/master

слияние через фиксацию

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

если у вас есть коммиты в master ветви, которые не in dev филиал, вы можете:

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

git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp

объяснение:

  1. Проверьте временную ветвь, которая указывает на ту же фиксацию, что и текущая ветвь.
  2. слияние master во временную ветку и запустите редактор сообщений фиксации. Если вы хотите, чтобы слияние зафиксировалось в выглядеть вы слили dev филиала в master, отредактируйте его из этого:

    Merge branch 'master' into temp
    

    to это:

    Merge branch 'dev'
    

    Совет: можно использовать -m "Merge branch 'dev'" вместо -e будет быстрее.

  3. обновить master указатель ветви для указания на фиксацию слияния.
  4. Проверьте dev филиала.
  5. принудительно удалить временную ветку.

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

много раз вы приходите из ветви, в которую вы хотели бы объединить текущую ветвь. В этом случае вы могли бы сделать:

git co - && git merge @{-1}

например:

git checkout somebranch      // (while on master)

// add some commits

git co - && git merge @{-1}  // will merge somebranch into master

Comments

    Ничего не найдено.