Как нажать с одной локальной ветки на всю удаленную ветку в github?

У меня более 4 удаленных веток в моем репозитории git. Моя цель — отправить один код во все эти ветки с помощью команды git.

Итак, я хочу следующее:

git add .
git commit -m "Do all with one command"
git push origin -all

Конечно, приведенная выше команда может работать некорректно.

Могу ли я выполнить такое действие только с 3 командами, как указано выше?

Что ж, вы можете просто нажать каждую по отдельности, но поместить логику git push в один скрипт, а затем выполнить этот скрипт.

Tim Biegeleisen 25.12.2020 02:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
186
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Там уже есть git push --all (обратите внимание на двойной дефис), но это, вероятно, или, по крайней мере, возможно, не то, что вам нужно. Настоящая проблема здесь в том, что вы не определили должным образом, чего вы хотите, или, по крайней мере, я не совсем уверен, чего вы хотите здесь достичь. Особенно запутанная часть для меня заключается в том, что это:

git add .
git commit -m "Do all with one command"

делает только один новый коммит в текущей ветке. Если вы затем используете git push, чтобы отправить этот новый коммит, но хотите отправить его в «четыре ветки», это, вероятно, не сделает то, что вы хотели.

Если бы вы использовали, скажите:

for branch in br1 br2 br3 br4; do
    git checkout $branch
    [do some editing and/or cherry-picking and so on here]
    git commit
done

так что у вас были обновления в ваших локальных ветках с именами br1, br2, br3 и br4, и теперь вы хотите отправить четыре (или более) коммита в четыре соответствующие ветки на origin, теперь все это имеет смысл.

Если на то пошло, здесь:

git push --all origin

может сделать именно то, что вы хотели. Однако это может сделать больше, чем вы хотите, поскольку это означает то же самое, что и:

git push origin "refs/heads/*:refs/heads/*"

т. е. используйте все имена ваших локальных веток для отправки запросов в другой Git для того же имени. Если бы у вас также были ветки br5 и br6, это привело бы к отправке любых новых коммитов в эти ветки и запросу origin обновить имена веток, которые пишутся так же, как ваши.

Если это действительно то, что вы хотите сделать, рассмотрите возможность использования --all или явного refspec, как в приведенном выше git push. Вы также можете изменить настройку push.default на matching. Большинству пользователей, вероятно, не следует использовать настройку matching. Это было по умолчанию в Git 1 и было изменено на simple в Git 2, потому что это было неправильно для большинства пользователей, но никто никогда не является «большинством пользователей».

Что я просто хочу здесь, так это использовать только одну локальную ветку «main», чтобы я мог использовать одну команду «commit». И я хочу нажать с этой «основной» ветки на все удаленные ветки. Вы, наверное, чувствуете себя странно из-за моей необычной цели, но я просто хочу этого сейчас. Вы можете помочь мне?

Intel Min 25.12.2020 03:39

Если вы успешно отправляете один коммит в четыре ветки, вы обычно отбрасываете коммиты из трех из этих веток. Это не очень хорошая идея (именно поэтому потребуется --force). Не делай этого.

torek 25.12.2020 07:33

Единственное исключение из этого правила — если вы хотите объединить все четыре ветки (что вы обычно делаете с тремя git merge командами или одной git merge с помощью слияния осьминога). В результате окончательное слияние будет ускоренной перемоткой вперед для всех четырех ветвей. Вы можете нажать это в одной команде, используя явные refspecs (и без опции --force). Но это не то, что вы показали выше.

torek 25.12.2020 07:35

Если ваш удаленный origin, вы находитесь в ветке master, удаленные ветки first, second, third и fourth:

git add .
git commit -m "Do all with one command"
git push origin master:first master:second master:third master:fourth

Другие вопросы по теме