Git check-tree-ish, помогите мне выяснить, происходит ли слияние - PullRequest
0 голосов
/ 10 июля 2019

Я по-королевски смущен тем, что git checkout [<tree-ish>] [--] <pathspec>…​.. делает

из документации git

Мой репо. содержит папки, и у меня есть старая ветка, давайте назовем это old_branch . Я хочу объединить одну папку из old_branch в мой dev

Я переключился на своего разработчика так:

git checkout dev

тогда я хотел объединить одну папку из моей старой ветки с dev

git checkout <old_branch> --myfolder

Вопрос : выполняет ли слияние с моим разработчиком или просто заменяет код из моего old_branch и помечает его как «объединенный»

, поскольку, когда я пытался выполнить git checkout -b new_branch, фиксировать, а затем делать git merge dev, он сказал мне, что никаких изменений (до настоящего времени) не было.

При проверке кода я вижу много удалений, которых не должно было быть.

Обновление 1 Пожалуйста, извините меня, если я не был ясно, прежде чем и спасибо за ответы. Я хочу объединить (объединить изменения) содержимое одной из подпапок в моем текущем дереве (dev) с содержимым одной из моих подпапок в дереве (old_branch)

Обновление 2 Похоже, я задал неправильный вопрос. Реальный вопрос должен состоять в том, как объединить подпапку в настройке моно-репо. Я не думаю, что есть автоматизированный способ сделать это. Я сделал это вручную.

1 Ответ

2 голосов
/ 10 июля 2019

Делает ли это слияние с моим разработчиком или просто заменяет код из моего old_branch и помечает его как "слитый"

git checkout не делает ни того, ни другого.

Я хотел объединить одну папку из моей старой ветки с dev

Вы на правильном пути, но есть некоторая путаница с синтаксисом.git merge обычно используется для объединения изменений от двух или более коммитов в один новый коммит (если это не ускоренная перемотка вперед, но это здесь не важно).Если я правильно понимаю, вы хотите заменить одну версию папки, которая существует в одном коммите (т. Е. Последний коммит в ветви dev), на версию той же папки из другого коммита (т.е. вold_branch).Вот последовательность команд, которую вам нужно сделать, с объяснениями:

  1. Сначала убедитесь, что мы находимся на ветке dev с git checkout dev
  2. Замените версию myfolder в области подготовки и рабочей области с версией из old_branch: git checkout old_branch -- myfolder.Обратите внимание, что это НЕ изменяет фиксированную версию, которая находится в вашем хранилище.В git-говорящем мы говорим, что HEAD по-прежнему указывает на тот же коммит.
  3. Теперь нам нужно «сохранить» изменения, которые мы внесли в мою папку в нашей рабочей области, зафиксировав ее в ветви dev.Поскольку checkout автоматически добавляет извлеченные файлы / папки в область подготовки, нам нужно только зафиксировать изменения:

    git commit -m 'change myfolder to version on branch old_branch'

  4. Вы можете видеть своиновый коммит на ветке dev, запустив git log.В верхнем коммите должно быть указано выше сообщение о коммите.

[Edit 1]: @JavaHead Эта публикация может быть вам интересна.Если myfolder на old_branch содержит файлы, которых нет в той же папке на dev, и вы хотите, чтобы они были добавлены в dev, просто извлеките нужные файлы из old_branch в myfolderна dev и зафиксируйте, как в потоке выше.Если вы имеете в виду, что каждая ветвь имеет разные версии одинаковых файлов, то вам, вероятно, понадобится git checkout -p old_branch -- <file-to-combine>.Это покажет вам разницу изменений в файле в каждой ветке и позволит вам выбрать, какие изменения нужно внести на индивидуальной основе.

...