1

Допустим, я создал клон http://code.google.com/r/kkowalczyk-leveldb из http://code.google.com/p/leveldb, используя веб-интерфейс на code.google.com.

С тех пор, как я создал свой клон, в http://code.google.com/p/leveldb были внесены изменения, и я хотел бы объединить их с моим клоном, желательно с сохранением истории (т.е. я мог бы объединить их вручную, используя diff/ инструмент слияния, но это не сохраняет историю git).

Каковы магические команды для выполнения такого слияния?

Желательно, пожалуйста, предоставьте полные команды. Я предполагаю, что это будет включать в себя некоторую комбинацию git fetch и git merge и веток удаленного отслеживания и т.д. Моя проблема не в том, что я не могу читать man-страницы для git fetch или merge, я просто не понимаю их.

Обновить:

Учитывая комментарий Ленивого Барсука ниже, я решил половину проблемы:

git remote add original https://code.google.com/p/leveldb/

Создает что-то под названием «оригинал», указывая на источник. Тогда я могу сделать:

git pull original master

Который извлекает и объединяет изменения из оригинала в мастера веток. Однако я бы сделал это за 2 отдельных шага: как git fetch и git merge $ что-то, чтобы слиться с моей текущей веткой.

Тем не менее, после git fetch original, я не знаю, что бы $ что-то было. Когда я делаю git branch -a, я не вижу ничего, связанного с моей удаленной исходной штукой.

Что усложняет, так это то, что в оригинале тоже есть 3 ветки.

Итак, куда же попадают данные, извлеченные из оригинала, и как я должен ссылаться на них в моем git merge $ что-то?

2 ответа2

2

Вы уже нашли, как добавить другой пульт и вытащить прямо с него:

git remote add original https://code.google.com/p/leveldb/
git pull original master

Если вы хотите выполнить выборку и объединение отдельно (вместо одной команды извлечения; возможно, потому что вы хотите проверить, что изменилось, прежде чем объединить ее), то вы можете сделать это следующим образом:

git fetch original         # update refs/remotes/original/*
git merge original/master  # merge refs/remotes/original/master

Вы можете проверить изменения перед слиянием с этой командой:

git log --reverse -p original/master@{1}..original/master@{0}

Вместо использования вышеуказанной спецификации ревизии на основе reflog, вы также можете просто скопировать и вставить спецификацию ревизии oldhash..newhash которая была выведена во время выборки.


Технически, git pull remote branch ближе к этой паре команд:

git fetch remote-or-url branch  # grab remote branch and put it in FETCH_HEAD
git merge FETCH_HEAD            # merge it

но эта пара (и, следовательно, также извлечение с указанием как удаленной, так и ветви) обычно не так хороша, так как она не обновляет ветви удаленного отслеживания (refs/remotes/original/*). Удаленные вызовы + ветвления для извлечения и извлечения полезны для одноразовых слияний из репозиториев, для которых вы не особенно хотите хранить полный набор ветвей удаленного отслеживания (т. Е. Извлекать / извлекать запрос на слияние от второстепенного / редкого участника) ,

0

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

git clone <google_URI>
cd <projdir>
git remote add github <github_URI>
git push github master

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .