Подтвердить что ты не робот

Как нажимать несколько ветвей от нескольких коммитов?

Я никогда не использовал git, прежде чем GitHub выпустил приложение Windows, поэтому я никогда не использовал его в командной строке.

Итак, вот моя ситуация:
Я сделал некоторые коммиты на master, затем переключил ветвь и сделал некоторые коммиты там тоже. Все без нажатия на GitHub. Когда я нажал sync в приложении Windows (который, как я полагаю, сделал git push), к моему удивлению, все мои коммиты были перенесены на мою новую ветку - даже те коммиты, которые я сделал, когда я был в master.

Так как это поведение приложения Windows, я предполагаю, что мне нужно использовать командную строку.
Какая правильная команда git push для толкания коммитов на правильные ветки на пульте дистанционного управления?

4b9b3361

Ответ 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 если это ваш первый коммит для этой ветки