У меня есть две ветви, master и dev. Я всегда работаю над dev и проверяю код только в основной ветке, как только он одобрен для производственного использования. Когда я делаю это, я должен сделать следующее:
git checkout master
git merge dev
git checkout dev
Это ужасно многословно, и, поскольку я делаю это часто, я бы хотел минимизировать это. Есть ли какая-нибудь команда git, которую я могу использовать для слияния из моей текущей ветки dev в другую master ветки без предварительной проверки master ветки? Что-то вроде:
git merge dev to master
было бы здорово. Я просмотрел документацию по git и ничего не увидел.
git
version-control
Крис
источник
источник
git stash
,git checkout master
,git merge dev
,git checkout dev
,git stash pop
.Ответы:
1. Добавьте удаленный псевдоним для вашего локального репозитория, например:
(Или на окнах
git remote add self C:\path\to\your\repository
)2. Нажмите на пульт дистанционного управления, например:
источник
/path/to/your/repository
это путь к вашему рабочему дереву, т.е. не включайте.git
каталог. Кроме того, это должно быть само собой разумеющимся: пульт должен быть обновлен, если вы переместите репо.git remote add self file:///c/projects
просто возвращаюсь с примечаниями по использованиюdev
), а затем нажать коммит с помощьюgit push self dev:master
..
работал нормально для меняgit push . head:master
.Текущий ответ @zerome, получивший наибольшее количество голосов, хороший, но немного ненужный многословный.
В базе вашего git репо вы можете просто сделать это:
git push . dev:master
Более обобщенное решение, которое будет работать в любом месте дерева:
источник
git push . dev:master
сильно упростила мою жизнь! Лучший ответ на сегодняшний день, спасибоgit push origin dev:master
merge --no-ff
поведение с этим?git remote add self file:///myRepo
?Лучше всего было бы использовать псевдоним, размещенный в вашем глобальном gitconfig (
~/.gitconfig
):так что вы можете вызвать его из любого хранилища как
источник
&&
, нет;
, он не сможет слиться, и не попытаться переключиться обратно. Надеемся, что пользователь достаточно умен, чтобы увидеть сообщение «Слияние не удалось» и разобраться с ним.merge-to = "!f() { export tmp_branch=
ветку мерзавца | grep '*' | тр -d «*»; git checkout $1 && echo git merge $tmp_branch && echo git checkout $tmp_branch; unset $tmp_branch; }; f"
, то давайте мне не придется набирать в отрасли я нахожусь в данный момент, так что если я хочу , чтобы объединитьdev
вmaster
и я наdev
данный момент я просто введитеgit merge-to master
merge-to = "!f() { export tmp_branch=`git branch | grep '* ' | tr -d '* '`; git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset $tmp_branch; }; f"
git branch | grep '* ' | tr -d '* '
; git checkout $ 1 && git merge --no-ff $ tmp_branch && git checkout $ tmp_branch; unset tmp_branch;}; f"Небольшая модификация псевдонима Jefromi, которая не требует ввода текущей ветки.
Таким образом , вы использовать его как:
git merge-to dev
.Это переключится на
dev
ветку, объединит ее с CURRENT и затем переключится обратно.Например, если вы находитесь на
master
ветке, он объединит мастера с dev, и вы все равно будете на мастере.Это определенно идет к моим точечным файлам :)
источник
Это старый, но ...
Объединяя решения из @ kevin-lyda и @ dmytrii-nagirniak выше. этот псевдоним объединяет текущую ветку с указанной веткой. Он использует метод remotes и использует команды git для получения контекста.
Быть использованным как:
источник
Чтобы объединить текущую ветку с другой веткой без проверки другой ветки:
Ускоренное слияние
Это действительно легко. По определению, ускоренное слияние просто означает, что указатель ветви перемещается вперед в дереве фиксации. Так что все, что вам нужно сделать, это просто симулировать это:
Подсказка: Если вы сделали a
git fetch
и у вас есть новые коммитыorigin/master
, вы можете переместитьmaster
ветку без проверки, используя:Объединить с помощью коммит слияния
Это не всегда возможно. Чтобы создать коммит слияния, вы должны выполнить операцию слияния. И чтобы выполнить операцию слияния, вы должны иметь коммиты в другой ветке, которых нет в текущей ветке.
Если у вас есть коммиты в
master
ветке, которых нет вdev
ветке, вы можете:Объяснение:
Объединитесь
master
с временной веткой и запустите редактор сообщений коммита. Если вы хотите, чтобы коммит слияния выглядел так, как будто вы слилиdev
веткуmaster
, отредактируйте его из этого:к этому:
Совет: Вы можете использовать
-m "Merge branch 'dev'"
вместо того,-e
чтобы быть быстрее.master
указатель ветви, чтобы он указывал на коммит слияния.dev
ветку.Это все еще касается вашего рабочего дерева, но минимально так. Он не откатывает дерево до полного состояния оригинала,
master
чтобы просто внести изменения в разработку. Некоторым может быть все равно, но для других это может быть важно.источник
Часто вы приходите из ветки, в которую хотите объединить текущую ветку. В этом случае вы можете сделать:
git co - && git merge @{-1}
например:
источник
Мое решение похоже на другие ответы со следующими отличиями:
set -ex
так, что каждая команда напечатана, и если команда терпит неудачу, функция выходит сразуgit merge
: git merge
которая гарантирует, что завершение табуляции работает с некоторыми настройками оболочки (например,gitfast
из oh-my-zsh)источник