2017-02-16 3 views
2

Извините за запутанный титул, но я не смог найти лучшего.git: слияние изменений с ветки, которая вернула предыдущее слияние

Вот моя проблема. У меня 2 филиала, develop и feature. Я последовал за этим процессом:

  1. код записи в feature
  2. слияния feature в develop
  3. обнаружить ошибку, вернуть слияние
  4. написать некоторый несвязанный код и совершать непосредственно develop.

Теперь я хочу, чтобы объединить изменения, которые я сделал непосредственно develop обратно в feature. Проблема в том, что когда я это делаю, он сдувает все изменения, которые я ранее делал в feature. Я предполагаю, что это происходит, потому что возврат на шаге 3 более поздний, чем любые изменения кода в feature, поэтому он применяется, чтобы вернуться к изменениям.

Можно ли делать то, что я пытаюсь сделать? Единственное, о чем я мог подумать, - это вернуть реверс в develop, затем слить, а затем вернуть обратный возврат. Это кажется громоздким.

+0

См https://github.com/git/git/blob/master/Documentation/howto/revert-a-faulty-merge.txt – torek

ответ

2

Я думаю, что вы можете исправить ситуацию в два этапа:

1) Есть ли интерактивный перебазироваться из develop и снимите Revert фиксации, т.е.

git rebase -i HEAD~6 # or however far back is the merge commit 

Удалите строку, содержащую Revert фиксации и полное rebase. На данный момент develop теперь имеет оригинальное слияние, но не возвращается.

2) Сделайте перестановку на develop, указав хеш фиксации, из которой оба были сделаны develop и feature. По умолчанию перебазирования будет игнорировать слияние фиксации полностью, тем самым удаляя его:

git checkout feature 
git rebase <SHA-1> 

где <SHA-1> здесь от совершения откуда feature ответвляется от develop.

После этих двух шагов ветвь develop не будет иметь ни фиксации слияния, ни отмены фиксации, и вы должны быть безопасно сливать ее в feature.

Я сильно рекомендую прочитать ответ, данный @torek в этом вопросе:

Accidentally merged in wrong branch to mine. Is there a way to remove these unwanted files?

1

Обычно вы делаете ветви функции и вы работаете на этой ветке, чтобы завершить функцию. Затем вы объединяете свою функцию в ветку разработки и через какое-то время развивается состояние вживую.

В вашем случае, если у вас есть изменения в ветке разработки, я бы предпочел переустановку в вашей ветке свойств. Затем вы получаете все изменения, и ваша ветвь функции переписывается на последнюю фиксацию вашей ветви dev.

У Atlassian есть хороший учебник, как вы можете работать с ветвями функций.

https://www.atlassian.com/git/tutorials/comparing-workflows#feature-branch-workflow

+0

Я не думаю, что это решает проблему. Почему мы хотим переустановить _develop_ на _feature_, чтобы принести коммиты от первого в последний? –

+0

no your rebase ваша ветка функций в том же состоянии, что и ваша разработка, тогда у вас есть все новые изменения, и в вашем журнале это похоже, что вы создали новую ветку из этой новой позиции. – Stony

+0

Да, но разве это не приведет к возврату, тем самым стирая его другую работу в ветке 'feature '? Невозможно позволить 'develop' взаимодействовать с' feature 'без этого, если мы не избавимся от плохого слияния. –

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