Git сливается между двумя папками, а не ветвями
Предположим, что следующий сценарий:
У меня есть проект git, который имеет dir с именем project
. Внутри этого романа я совершил некоторые коммиты.
Затем с cp -r
я продублировал этот каталог в директорию с именем project-with-feature-b
, т.е. Вручную создал ветку.
Теперь я хочу объединить эти две папки, как если бы они были двумя ветвями, есть ли способ сделать это с помощью git?
Чтобы быть более конкретным для моей проблемы. У меня есть репозиторий svn, который я использую с git -svn инструментом для клонирования. И я не могу использовать опции -T/-b/-t, но я хочу слить.
Ответы
Ответ 1
Да, вы можете технически выполнить это, но только потому, что еще не поздно исправить свою ошибку. Вам нужно вернуться во времени и сделать это правильно:
-
Переместите папку project-with-feature-b
вне вашего репозитория git:
$ mv project-with-feature-b ..
-
Вернитесь к git log
и найдите идентификатор фиксации последнего коммита, прежде чем создать каталог project-with-feature-b
. Если вы не сделали никаких коммитов внутри "каталога" project-with-feature-b
, вы можете пропустить этот шаг.
-
Создайте новую ветвь с именем feature-b
на основе этого идентификатора фиксации. Если вы пропустили шаг 2, опустите <commit-id-from-step-2>
$ git branch feature-b <commit-id-from-step-2>
$ git checkout feature-b
-
В ветке feature-b
замените папку project
резервной копией project-with-feauture-b
$ rm -rf project
$ mv ../project-with-feature-b project
$ git add project
$ git commit -m "Add feature-b"
-
Вернитесь к своей основной ветке и объедините ветвь feature-b
в мастер
$ git merge --no-ff feature-b
В будущем вы должны использовать ветки, как указано выше, прежде чем начать работу. Научитесь правильно использовать инструменты, а не как вы думаете, что они должны работать.
Ответ 2
Взгляните на подкаталог Detach в отдельный репозиторий Git, как только вы разделите историю обоих каталогов, вы сможете разветвлять, объединять или делать что угодно вы хотите.
Ответ 3
Эти вопросы очень старые, я недавно присоединился.
Я использую ubuntu и использую meld для решения проблем слияния.
Итак, если у меня есть 2 папки одного и того же приложения, которые могут иметь незначительные изменения.
Я сделаю это в терминале
meld ./app_branch_master ./app_branch_dev
Это откроет как папку,
Meld потребует времени для сравнения обеих папок.
Он покажет вам, что там с левой стороны и что с правой стороны.
Вы также можете переместить небольшой код.
Как я это делаю.