Как использовать фильтр-ветвь, чтобы получить коммиты в конкретный каталог? - PullRequest
0 голосов
/ 04 мая 2020

Моя текущая ветвь sandbox имеет коммиты, которые влияют на множество файлов.

Я хочу создать новую ветку, отключив develop, которая имеет только коммиты sandbox, которые влияют на определенную папку.

Итак, в действительности, я хочу, чтобы sandbox-myfolder имел журнал, который выглядит как вывод log -- myfolder. (Для простоты можно предположить, что я сохранил свои коммиты небольшими, и что если они касаются моей папки, они больше ничего не касаются, и наоборот.)

Похоже, что git filter-branch - это то, что нужно использовать, но как?

Ответы [ 2 ]

0 голосов
/ 04 мая 2020
git checkout -b sandbox-myfolder sandbox
git filter-branch -- develop..@ -- path/to/myfolder
git rebase develop

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

0 голосов
/ 04 мая 2020

Я никогда не использовал фильтр-ответвление, поэтому я не могу комментировать, но у меня есть другая идея:

Как насчет получения идентификаторов коммитов (sha1-s) коммитов, которые фактически касались папки ваш интерес:

git log --pretty=tformat:"%H" sources/myfolder-path

Затем вы можете создать ветку из начального коммита (или, возможно, из коммита, который создал интересующую вас папку, это должен быть последний коммит из списка, который вы получите из предыдущей команды) Затем вы можете перебрать этот список в al oop и применить cherry-pick один за другим (или все сразу, если вы sh) к этой ветви

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

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