Git: как не удалять файлы, когда перебазирование фиксирует удаление файла - PullRequest
4 голосов
/ 19 марта 2010

У меня есть ветка, которую я хотел бы перебазировать в последний коммит на моем мастере. Проблема в том, что одним из промежуточных коммитов на master было удаление и игнорирование определенного набора файлов (см. этот вопрос ).

Если я просто сделаю прямую перезагрузку, эти файлы снова будут удалены. Есть ли способ сделать это, внутри git, вместо того, чтобы копировать все файлы вручную, а затем снова копировать их обратно?

Или я должен сделать что-то вроде создания новой ветви из master, а затем объединить только коммиты из старой ветви?

Попытки ascii art:

master    branch
  |        w  work in progress on branch
  C        |  committed further changes on master
  |        |
  B        /  committed delete/ignore files on master
  |       2  committed changes on branch
  |      /  
  A     /  committed changes on master which I now need to get branch working
  |    1  committed changes on branch
  0___/  created branch

(Занимаясь искусством, я понимаю, что могу просто перебазировать ветвь из А, а затем объединить, когда я закончу, но я все еще хотел бы знать, есть ли способ сделать это «правильно») 1015 *

ОБНОВЛЕНИЕ Предупреждение всем, кто пытается это сделать. Предлагаемое здесь решение подходит, но когда вы снова извлекаете master, повторная фиксация B будет применена, и вы снова потеряете все свои файлы: (

1 Ответ

2 голосов
/ 19 марта 2010

Из вашего комментария я понимаю, что вам нужно перебазировать ветку dev поверх master за исключением B.
Вы не хотите, чтобы файлы, которые вы удалили в одной ветви, были удалены в другой.

Одним из возможных решений будет:

  • rebase --interactive мастер для перезаписи коммитов (если возможно)
    0--A--C'--B'  master
     \
      --1--2--w     dev
  • перебазировать ветку dev поверх C '(представляет все основные коммиты, кроме B)
    0--A--C'--B' master 
           \
            --1'--2'--w' dev

Это означает, что вы еще не отправили мастер в другой репозиторий (в противном случае это повлекло бы за собой кошмар слияния для тех, кто хочет получить мастер в своей собственной репо / мастер-ветке)

...