Я работаю с git-репозиторием, которому нужен коммит из другого git-репозитория, который ничего не знает о первом.
Обычно я выбираю вишню с помощью команды HEAD@{x}
reflog, но, поскольку .git
ничего не известно об этой записи reflog (другой физический каталог), как я могу выбрать вишню или я могу?
Я использую git-svn
. Мой первый филиал использует git-svn
из trunk
из Subversion репо, а следующий филиал использует git-svn
на Subversion ветви.
git
cherry-pick
gitcoder182
источник
источник
Ответы:
Вам нужно будет добавить другой репозиторий в качестве удаленного, а затем получить его изменения. Оттуда вы видите коммит и можете его выбрать.
Как это:
Теперь у вас есть вся информация, чтобы просто сделать
git cherry-pick
.Подробнее о работе с пультами здесь: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
источник
--stdlayout
опцию git-svn, если вы используете стандартную разметку транка / веток / тегов в Subversion. Тогда ветка Subversion будет простой удаленной веткой git.git am < d821j8djd2dj812.patch
. За пределами GH, аналогичные концепции могут быть сделаны, как указано в альтернативном ответе ниже.Ответ, как и было дано, заключается в использовании format-patch, но поскольку вопрос заключался в том, как выбрать вишню из другой папки, вот фрагмент кода, предназначенный именно для этого:
источник
git format-patch
команда создает патч изsome_other_repo
коммита, указанного его SHA (только-1
для одного коммита). Этот патч передан по каналуgit am
, который применяет патч локально (-3
означает попытку трехстороннего слияния, если патч не может быть применен корректно). Надеюсь, это объясняет.--ignore-whitespace
. Полная команда:git --git-dir=../<some_other_repo>/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k --ignore-whitespace
Вот пример удаленного извлечения-слияния.
Тогда ты можешь:
или вы могли бы даже объединить всю ветку
источник
git merge projectB/master
очень, очень неправильно , потому что вы не подаете изменения от одной фиксации (как вишневое выбор будет), вы фактически сливаясь все изменения вprojectB/master
которые не содержатся в собственнойmaster
отрасли.git remote rm projectB
. Также используйтеgit tag -d tag-name
для удаления любых тегов, извлеченных из удаленного репо. Удаленные коммиты больше не будут отображаться в вашей истории, а удаление в конечном итоге удалит их из хранилища.Вы можете сделать это, но это требует двух шагов. Вот как:
Замените
<remote-git-url>
URL или путь к хранилищу, из которого вы хотите выбрать вишню.Замените
<branch>
веткой или именем тега, который вы хотите выбрать из удаленного хранилища.Вы можете заменить
FETCH_HEAD
на git SHA из ветки.Обновлено: изменено на основе отзывов @ pkalinow.
источник
git fetch <repo-url> <branch> && git cherry-pick <sha>
.Вот шаги, чтобы добавить удаленный, получить ветки и вишни выбрать коммит
Источник: https://coderwall.com/p/sgpksw
источник
Смотрите Как создать и применить патч с Git . (Из формулировки вашего вопроса я предположил, что этот другой репозиторий предназначен для совершенно другой кодовой базы. Если это репозиторий для той же кодовой базы, вы должны добавить его в качестве удаленного, как предложено @CharlesB. Даже если это для другого кодовая база, я думаю, вы все равно можете добавить его в качестве удаленного, но вы можете не захотеть получить всю ветку в свой репозиторий ...)
источник
Вы можете сделать это в одну строку следующим образом. Надеюсь, что вы находитесь в git-репозитории, который нуждается в подобранных изменениях, и вы проверили, чтобы исправить ветку.
git fetch [ответвление URL] [ответвление на cherry-pick из] && git cherry-pick [commit ID]
источник
ssh://
части, только дляhttps://
Да. Извлеките хранилище, а затем выберите вишню из удаленной ветки.
источник
Предполагая,
A
что это репо, из которого вы хотите выбрать вишню, иB
тот, к которому вы хотите выбрать вишню, вы можете сделать это, добавив</path/to/repo/A/>/.git/objects
к</path/to/repo/B>/.git/objects/info/alternates
. Создайте этиalternates
файлы, если они не существуют.Это заставит репо B получить доступ ко всем git-объектам из репо A и заставит вишневый пик работать на вас.
источник
Моя ситуация состояла в том, что у меня есть голое репо, к которому толкает команда, и клон этого сидящего рядом с ним. Этот набор строк в Makefile работает правильно для меня:
Поддерживая мастер репо в актуальном состоянии, мы можем выбрать предлагаемое изменение, опубликованное в репо. У нас также есть (более сложный) способ выбора нескольких веток для сводного анализа и тестирования.
Если «ничего не знает» означает «нельзя использовать в качестве удаленного», то это не помогает, но этот ТАК вопрос возник, когда я начал поискать этот рабочий процесс, поэтому я решил внести свой вклад.
источник
Если вы хотите выбрать несколько коммитов для данного файла, пока не достигнете данного коммита, используйте следующее.
источник