Как нажимать несколько ветвей от нескольких коммитов?
Я никогда не использовал git
, прежде чем GitHub
выпустил приложение Windows, поэтому я никогда не использовал его в командной строке.
Итак, вот моя ситуация:
Я сделал некоторые коммиты на master
, затем переключил ветвь и сделал некоторые коммиты там тоже. Все без нажатия на GitHub.
Когда я нажал sync
в приложении Windows (который, как я полагаю, сделал git push
), к моему удивлению, все мои коммиты были перенесены на мою новую ветку - даже те коммиты, которые я сделал, когда я был в master
.
Так как это поведение приложения Windows, я предполагаю, что мне нужно использовать командную строку.
Какая правильная команда git push
для толкания коммитов на правильные ветки на пульте дистанционного управления?
Ответы
Ответ 1
Чтобы проталкивать все ветки (refs под refs/heads), используйте следующую команду (где origin - ваш пульт):
git push origin --all
Вы также можете установить push.default
в matching
в свою конфигурацию, чтобы по умолчанию все ветки с тем же именем были на обоих концах. Например:
git config --global push.default matching
Так как Git 2.0 по умолчанию используется simple
, который является самым безопасным вариантом.
Ответ 2
Если вы хотите нажимать несколько отдельных ветвей (например, branch1 и branch2), вы можете использовать:
git push origin branch1 branch2
В Git >= 2.4 эта операция может выполняться атомарно (т.е. если ей не ударить ни одна из ветвей, указанная ничего не будет нажата):
git push --atomic origin branch1 branch2
Ответ 3
git push origin
по умолчанию будет удаляться из всех ветвей отслеживания до пульта.
git push origin my-new-branch
будет нажимать только вашу новую ветку.
Я не верю, что есть что-то простое или возможное, чтобы сделать случайным образом, что будет толкать фиксации из двух разных ветвей до одной ветки и выполнять слияние на пульте дистанционного управления.
Я бы догадался, что новая ветка имела фиксации от мастера в истории. Чтобы убедиться, что это правда, запустите git log my-new-branch
локально и посмотрите, были ли эти коммиты в вашей истории.
Если это так, когда вы "переключаете ветки", вы, вероятно, отделились от мастера после того, как были сделаны новые коммиты, поэтому новая ветвь имела все фиксации в истории, а не только уникальные для этой ветки.
Ответ 4
Поздний ответ, но я собираюсь поделиться своим решением, которое сработало для меня.
Наконец, мой файл /foo/.git/config
выглядит так:
[core]
...
[remote "dev"]
url = http://dev.foobar.com/foo.git
fetch = +refs/heads/*:refs/remotes/dev/*
[remote "pro"]
url = http://pro.foobar.com/foo.git
fetch = +refs/heads/*:refs/remotes/pro/*
[remote "all"]
url = http://dev.foobar.com/foo.git
url = http://pro.foobar.com/foo.git
[http]
postBuffer = 524288000
И команда;
git push all --all
Кредиты: Одновременное переключение на несколько хранилищ Git
Ответ 5
Вы можете сделать
git branch | grep "<pattern>" | xargs git push
Замените <pattern>
регулярным выражением, чтобы оно соответствовало вашим именам веток и все.
Вы можете добавить --set-upstream origin
если это ваш первый коммит для этой ветки