Разделить ветку Git по файлам - PullRequest
1 голос
/ 16 марта 2019

В Git Branch A есть несколько измененных файлов (около 50 файлов или около того), которые изменялись с течением времени, а иногда и в том же коммите:

Пример:

File A
File B
File C
File AA
File BB
File CC
File ZZ

Я хотел бы разделить изменения файла на две ветви, файлы A, B, C, ZZ были бы в ветви A, а файлы AA, BB, CC, ZZ были бы в ветви B. Мне нужен один общий файл.

Есть ли способ сделать это? Если так, то как?

Пример:

Master --------\
                \
                 \- - - - -- Branch A (Files, A,B,C,AA,BB,CC, ZZ)

Goal:
Master --------\
               |\
               | \- - - Branch A (Files, A,B,C, ZZ)
               |
               |-------- Branch B (Files, AA,BB,CC,ZZ)

1 Ответ

1 голос
/ 16 марта 2019
  1. Определите ваш общий хеш коммитов ревизии. Это обозначено красной звездочкой на всех изображениях ниже. Я собираюсь использовать a9c146a09505837ec03b в качестве примера хеша.

    а. git show или gitk может помочь с этим

  2. Оформить новую ветку с этим хешем в качестве головы (т. Е. Branch B)

    а. git checkout -b Branch_B a9c146a09505837ec03b

  3. извлечение определенных файлов из Branch A в вашу новую ветку Branch B.

    а. т.е. git checkout Branch_A -- "A.file"

или если вы хотите сохранить свои сообщения о коммитах, вы можете использовать git cherry-pick, но только в том случае, если изменения в ваших файлах не смешиваются в одном и том же коммите. Если вам нужно разделить коммит, то лучше всего использовать приведенный выше пример с checkout. Вы потеряете свою историю, но если вам действительно нужно сохранить ее, вы можете git checkout также на определенных хешах коммитов и просмотреть историю, чтобы привести в порядок мутации файлов. Сильная головная боль наверняка.

Пожалуйста, имейте в виду, что ваши хэши изменятся.

повторите шаги 2 и 3, необходимые для количества веток, которые вы хотите создать. Избегайте внесения изменений в один и тот же контент в нескольких ветвях, это приведет к конфликту слияния.


Некоторые примеры:

Current State

Example with no common files

Example with common file changes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...