Мой сценарий заключается в том, что у меня есть одна ветка, в которой я значительно улучшил процесс сборки (ветка A), а в другой я работаю над несвязанной функцией (ветка B). Итак, теперь, когда я взламываю ветку B, я хочу добавить то, что написал в ветке A, потому что мне нужны более быстрые и простые сборки. Однако я не хочу «загрязнять» свою ветку B, просто добавляю изменения из ветки A в неустановленные изменения.
Что пробовал (стоя на ветке B):
git merge --no-commit branchA
Не работает, потому что помещает вас внутрь слияния. Если бы этого не было, это было бы идеально.
git checkout branchA -- .
Не работает, потому что он применяет изменения между branchA..branchB, а не master..branchA изменений.
Что-нибудь еще?
Изменить: Да, изменения в ветке A фиксируются. В этом примере есть только одна ветка с улучшениями сборки, но может быть до N веток с улучшениями сборки, которые я хочу применить при работе над функциональной веткой.
Ответы:
Мне просто нужно было сделать что-то подобное, и я смог исправить это, добавив
--squash
в команду слиянияисточник
git commit —amend
и он добавит новые изменения в последний коммит, я просто не совсем уверен, работает ли он сcherry-pick -n
должны делать то, что вы хотите, но я не уверен, почему вы хотите, чтобы улучшения сборки были неустановленными изменениями - это только усложняет некоторые вещи (например, объединение других изменений в измененные файлы или перебазирование чего-либо).В этом случае я бы создал новую ветку C, которую вы объедините как с A, так и с B (и с любыми другими ветвями с улучшениями сборки). Зафиксируйте изменения в функциональной ветви B, затем объедините их с ветвью C, которая теперь содержит улучшения сборки и изменения функциональной ветви, чтобы вы могли протестировать их вместе. Если вам нужно внести больше изменений, сделайте это в соответствующей ветке, а не в C, а затем выполните слияние с C. Поэтому никогда ничего не меняйте в ветке C, просто используйте ее для интеграции изменений из других веток.
Это означает, что вы можете использовать все функции Git в ветви C вместо того, чтобы манипулировать незафиксированными изменениями в грязном дереве.
источник
cherry-pick -n
: я создал рабочую копию своего кода, добавив много чего в случайные места. Теперь я хочу очистить свой код, прежде чем переходить к ветке этой функции. Поэтому я переключаюсь на временную ветку, фиксирую все изменения. Вернитесь в ветку функций,cherry-pick
которая фиксирует. Есть ли лучший способ сделать это?У вас должна быть возможность тщательно выбирать коммиты (
-n
чтобы сразу не совершать коммит ).источник
Я не уверен на 100%, что понял это ясно, но в моем случае я только что создал патч различий между ветвями, а затем применил этот путь к ветке B.
Внутри ветви A:
источник
Я не уверен, что понимаю ваши требования.
Можете запустить слияние, потом позвонить
git reset HEAD~1
.Следующая последовательность должна воспроизводить каждую фиксацию между
master
иbranchA
поверхbranchB
. Коммиты, которые уже были применены,branchB
будут пропущены.источник
--soft
опцию, если вы не хотите вносить изменения в промежуточную область. Не могли бы вы нарисовать график того, как устроены ваши филиалы?