Чтобы объединить текущую ветку с другой веткой без проверки другой ветки:
Ускоренное слияние
Это действительно легко. По определению, ускоренное слияние просто означает, что указатель ветви перемещается вперед в дереве фиксации. Так что все, что вам нужно сделать, это просто симулировать это:
git branch -f master dev
Предостережения: Предполагается, что это masterуказывает на коммит, который также находится в devветке или некоторой другой ветке. Если этого не произойдет, вы рискуете потерять работу! В отличие от того, git mergeчто создаст коммит слияния (или выдает жалобу), когда быстрая перемотка вперед невозможна, этот метод молча заставляет указатель ветви указывать на другой коммит.
Это также предполагает, что вы являетесь единственным, кто работает над репо, и / или вы знаете, что делаете.
Подсказка: Если вы сделали a git fetchи у вас есть новые коммиты origin/master, вы можете переместить masterветку без проверки, используя:
git branch -f master origin/master
Объединить с помощью коммит слияния
Это не всегда возможно. Чтобы создать коммит слияния, вы должны выполнить операцию слияния. И чтобы выполнить операцию слияния, вы должны иметь коммиты в другой ветке, которых нет в текущей ветке.
Если у вас есть коммиты в masterветке, которых нет в devветке, вы можете:
Отказ от ответственности: это просто подтверждение концепции, просто чтобы показать, что иногда возможно выполнить слияние с другой веткой без проверки. Если вы хотите использовать его каждый день, вы, вероятно, захотите создать для него псевдоним с помощью перенаправления оболочки или создать для него сценарий оболочки. Опять же, вы также можете сделать сценарий оболочки для более короткого процесса, показанного в вопросе.
git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp
Объяснение:
- Проверьте временную ветку, которая указывает на тот же коммит, что и текущая ветка.
Объединитесь masterс временной веткой и запустите редактор сообщений коммита. Если вы хотите, чтобы коммит слияния выглядел так, как будто вы слили devветку master, отредактируйте его из этого:
Merge branch 'master' into temp
к этому:
Merge branch 'dev'
Совет: Вы можете использовать -m "Merge branch 'dev'"вместо того, -eчтобы быть быстрее.
- Обновите
masterуказатель ветви, чтобы он указывал на коммит слияния.
- Проверьте
devветку.
- Принудительно удалить временную ветку.
Это все еще касается вашего рабочего дерева, но минимально так. Он не откатывает дерево до полного состояния оригинала, masterчтобы просто внести изменения в разработку. Некоторым может быть все равно, но для других это может быть важно.