2016-07-19 4 views
2

Я как-то взял всю историю фиксации основной ветви в моем последнем запросе на растяжение. Мой PR содержит сообщение:github берет всю историю фиксации

This pull request is big! We’re only showing the most recent 250 commits.

У меня есть филиал, который имеет много особенностей. Это рабочая ветка, используемая для тестирования. Я должен разбить эту ветку на отдельные запросы на подачу с каждым PR в качестве отдельной функции, чтобы их можно было пересмотреть. Существует некоторый кроссовер с различными функциями, поэтому эти отдельные ветви не будут функционировать.

Отверстие master, а затем выполните незафиксированное слияние с моей последней рабочей веткой. Я выбираю файлы, которые хочу объединить, связанные с этой функцией. Эти ОР не основываются друг на друге. Каждый из них будет обновлен с master, но не друг с другом.

Что, кажется, происходит в том, что ветка цели собирает всю историю рабочей ветви. Как я могу избежать этого? Может ли исправление исправить это?

+0

Я вижу, что это довольно много, слияние ветви развития с мастером. В чем проблема? – maszter

+0

См. Править на OP. –

+0

Как вы делаете эти PR? Является ли он одним на каждую ветку (и ветка умирает), или она несколько на каждую ветвь? – Makoto

ответ

1

Это как-то наоборот. Я разрабатываю кучу функций на рабочей ветке. Затем я возвращаюсь назад и отключаюсь от мастера и выполняю uncommitted слияние с рабочей веткой с использованием SourceTree. Это позволяет мне контролировать, какие файлы входят в слияние. Я создаю отдельную ветвь для каждой функции. Если бы я мог вишневым выбрать отдельные файлы вместо целых коммитов, мне не пришлось бы так поступать.

Даже если вы не совершаете фиксацию слияния, у вас все еще есть HEAD вашей рабочей ветви как один из ваших родителей, что приведет к ее истории.

Я думаю, что вы можете делать то, что хотите, с git reset, но гораздо проще сделать это, чтобы создать еще один клон, проверить там рабочую ветку и скопировать все файлы на ваш заказ, который находится на ветке мастера. Затем вы можете выполнить любые изменения, которые вы хотите, и сформулировать их в правильные коммиты.

Это было бы намного проще, если бы ваши коммиты были атомарными, так как тогда вы могли бы просто закричать, как вы говорите. Выполнение немного работы в организации ваших транзакций экономит много времени, пытаясь разделить их.

+0

Как мне это сделать с 'git reset'? Я не уверен, что понимаю ваше решение. Поэтому я клонирую «мастер», затем я проверяю рабочую ветку. Затем я «копирую все файлы в ваш чек, который находится на ветке мастера». Как копировать между филиалами? Я могу скопировать файлы в каталог temp, переключить ветви и скопировать их, но это нелегко и подвержено ошибкам. –

+2

Да, я предлагаю использовать временный каталог, но временный каталог, который является другой проверкой репо. Это выглядело бы как 1) 'git clone /tmp/work-copy' 2)' cd/tmp/work-copy && git checkout work-branch' 3) 'rsync -a/tmp/work-copy ~/awesome-project' 4) 'cd ~/awesome-project && git status'. Git сообщит вам, какие файлы были изменены, поэтому вы можете выборочно сгенерировать их с помощью 'git add' и решить, какие из них следует совершить. –

+0

Это на самом деле не сработало.Он просто добавил '/ tmp/working-copy' в' ~/awesome-project'. –

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