Вытащить коммит из другого репозитория

Я клонировал проект для себя, но мой друг внес изменения в исходный проект. Я хотел бы перенести изменения из этой фиксации в свой проект.

С использованием

git fetch https://github.com/cvandermeer/wisemonkeys.git f70bcfd75a498ed9159b6e5313e306166fc3df62

выдает следующую ошибку:

ошибка: нет такой удаленной ссылки f70bcfd75a498ed9159b6e5313e306166fc3df62

git remote -v дает мне следующее,

origin  https://github.com/alucardu/appsynth.git (fetch)
origin  https://github.com/alucardu/appsynth.git (push)

Нельзя ли вытащить коммит из другого проекта?


person Peter Boomsma    schedule 01.02.2015    source источник


Ответы (2)


(Для удобства в дальнейшем будем называть вашу подругу Алисой.)

Вы получаете ссылки (ветви или теги), а не коммиты

Я хотел бы перенести изменения из этой фиксации в свой проект.

Нельзя ли вытащить коммит из другого проекта?

Строго говоря, вы не получаете коммиты; вы получаете ссылки (ветви или теги). Если вас интересует конкретный коммит, который существует в репозитории Алисы, но отсутствует в вашем репозитории, вам необходимо получить ссылку, чьи предки содержат рассматриваемый коммит из репозитория Алисы.

Используйте допустимый синтаксис git fetch

Использование [...] вызывает следующую ошибку [...]

Команда, которую вы используете,

git fetch <remote-url> <commit>

не является допустимым синтаксисом git fetch, поэтому вы получаете ошибку. Синтаксис, который вы хотите использовать,

git fetch <repository> 

где <repository> — удаленный, т.е. никнейм, под которым ваше локальное репо знает репо Алисы. Вы можете быть более конкретными, а также добавить refspec в конце этой команды.

Изменить: как указано Тореком в его комментарий, вы также можете использовать голый URL, не настраивая удалённый доступ в локальном репозитории, но это, вероятно, не то, что вы хотите здесь делать.

Сначала добавьте репозиторий Алисы в качестве удаленного

git remote -v дает мне следующее [...]

Вывод git remote -v указывает на то, что вы еще не добавили репозиторий Алисы в качестве удаленного вашего локального репозитория. Вам нужно сделать это, прежде чем вы сможете извлечь из него:

git remote add alice https://github.com/cvandermeer/wisemonkeys.git

Получите и узнайте больше об интересующем коммите

Затем запустите

git fetch alice

чтобы получить все, чего у вас еще нет, из репозитория Алисы. Затем вы можете запустить

git name-rev f70bcfd75a498ed9159b6e5313e306166fc3df62  

для определения ссылки, из которой доступна фиксация, и

git show f70bcfd75a498ed9159b6e5313e306166fc3df62

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

Дополнительные ресурсы

person jub0bs    schedule 01.02.2015
comment
Для полноты картины я добавлю, что вы можете предоставить необработанный URL-адрес (и необязательные refspec(s)) для git fetch ... но вы не должны этого делать, если вы не очень хорошо знакомы с git и не знаете, что вы попадаете на этот путь. :-) - person torek; 01.02.2015

Я бы предложил следующую последовательность действий:

1) Подключите другой репозиторий как удаленный репозиторий с помощью git remote.

2) Потяните его.

3) Используйте git cherry-pick, чтобы вытащить коммит из другого репозитория в свой.

person Sam Varshavchik    schedule 01.02.2015