2015-01-29 2 views
0

У меня есть 2 ветки:
- разработка;
- новый (от развитие);
и 40 единиц в отрасли новый товар.
мне нужно просто установить все изменения (последняя новой особенностью состояния) в новой отрасли новой особенностью сингл.
Я не могу сделать rebase, потому что развитие ветка теперь слишком новая, и слишком сложно сделать сброс всех 40 коммитов.GIT: Последнее состояние ветвления к новой ветке

+2

Как будет «новая функция-единственная» отличаться от «новой функции», когда вы закончите? Будет ли оно идентичным (пока вы не начнете выполнять обе ветви) или каким-то другим? – Useless

+0

'new-feature-single' просто нуждается в изменениях, таких как' new-feature', но просто должен быть с одним коммитом, который будет иметь все изменения в одном –

+0

OK, поэтому вы хотите выкачать все эти коммиты в одну фиксацию - должен ли он иметь того же предка, что и «новая функция»? – Useless

ответ

1

Это то, что я думаю, что вы просили, хотя я не совсем понятно, на что вы надеетесь достичь:

$ git checkout -b new-feature-single development 
    # make a new branch, starting from development/HEAD, with no new commits 
$ git merge --squash new-feature 
    # apply all the changes from new-feature 
$ git commit 
    # create a single commit with all those changes 

Обратите внимание, что слияние это с new-feature позже не будет вести себя хорошо, потому что git видит, что вы делаете изменения дважды независимо и не можете сказать, что они связаны.

+0

Да, вот и все! Я подозревал, что это команда -squash, но я не мог понять, как ее использовать ... В моем случае ветка 'new-feature' не является nassassary. Мне просто нужны были мои изменения («независимые» изменения еще лучше), как было описано в вопросе. Так что ваш ответ абсолютно прав! Благодаря! –

0
  1. Создайте еще одну ветку нового-единственного.
  2. Добавить удаленный восходящий поток в новой функции: от одного до нового: git remote add new-feature.
  3. Оформить заказ на новую единицу.
  4. Напряжение изменение от новой-функции для нового признака-сингла: мерзавца тянуть новую-функции

Совет: Список всех происхождения и другое удаленное URL, подключен к отрасли: мерзавец дистанционного -v

0

ли это делай что хочешь?

git checkout -b new-feature-single new-feature 

Это создает новую ветвь new-feature-single, которая указывает на то передай, что new-feature в данный момент делает. Это похоже на то, что вы хотите сделать, но если это не так, возможно, необходимы некоторые дополнительные разъяснения ...

Один из ваших комментариев, похоже, указывает, что после этого вы хотите преобразовать new-feature-single в single-commit совершает те же изменения, что и последовательность фиксаций в new-feature. После этого вы можете сделать это, выполнив git rebase -i development..HEAD и изменив все действия, кроме первой строки, на «squash» (или просто «s»). Если вы сделали вышеуказанный шаг, то это не коснется вашей ветки new-feature, но оставит new-feature-single с одной фиксацией на нем, разветвленной от той же исходной точки и содержащей кумулятивные изменения последовательности фиксации new-feature.

+0

Создает новую ветку, подобную старой, с теми же 40 коммитами. Мне нужно иметь новую ветку с одной фиксацией, которая будет иметь все изменения. –

+0

@Chaki_Black отредактирован, чтобы включить описание того, как сквоить новую ветку ... – twalberg

1

Прежде всего, найдите общего предка для ваших ветвей «развития» и «новой функции». Из вашего описания, это может быть очень хорошо коммит «развитие» в настоящее время указывает, но есть удобная команда, чтобы узнать наверняка называется merge-base:

git merge-base new-feature development

Давайте предположим, что для обсуждения, что вышеуказанная команда выплевывает "abc123". Далее создайте новую ветку с именем «новой особенностью-синглом» основаны на фиксацию «abc123»:

git checkout -b new-feature-single abc123

Теперь вы должны иметь «новую особенность-сингл» проверил, и это новые точки ветвления в тот же родитель, с которого начиналась ваша ветка «новая функция».

Наконец, сливается в «новую-функцию-сингла» коммиты из «новой-функции», и давят их всех до единой фиксации:

git merge --squash new-feature

«Новая-функция-сингл «ветвь теперь имеет все изменения от« новой функции », объединенной в единую фиксацию.

Смежные вопросы