Как лучше всего работать с «раздвоенным» git-репо и вернуть некоторые новые функции в исходное состояние - PullRequest
1 голос
/ 06 апреля 2010

У меня есть блог-проект на GibHub, где мой друг хочет основать свой код. Он внесет некоторые изменения в некоторые файлы, которые он не хочет возвращать мне (возможно, таблицы стилей и изображения), но он может реализовать новую функцию, которую он хотел бы отодвинуть обратно в мой проект.

Он также должен иметь возможность получить новый код от меня, где он хотел бы получить все новые вещи.

Я огляделся, и кажется, что Rebase - это то, что ему нужно, чтобы получать от меня обновления, но как он может легче всего передать мне функцию? (Он изучает Git так же, как и я)

Ответы [ 3 ]

5 голосов
/ 06 апреля 2010
git clone git://yourrepo.com/project.git

Создать отслеживаемую удаленную ветку. Это означает, что операции вытягивания и отталкивания автоматически выполняются с основной ветвью. Ветвь трека может быть origin / dev или origin / master. Какой бы.

git checkout --track -b mylocalbranch origin/trackedbranch

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

git pull --rebase

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

Когда он закончит и хочет воплотить эти изменения в жизнь, он должен сообщить об этом:

git pull --rebase # get most recent changes

Тогда для пустого хранилища:

git push # push his changes to the main repo

Если это не пустое хранилище (например, ваше хранилище в домашней папке или что-то подобное), то предпочтительно, чтобы он уведомил вас о том, что он готов, а затем вы выполните

git pull /path/to/his/repo

Как правило, не рекомендуется использовать репозитории без поддержки. Причина в том, что у вас могут быть незавершенные изменения в вашем регионе, и когда он подталкивает к этому, может возникнуть хаос details . Нить в ловушке ядра, обсуждающая это падение ямы

2 голосов
/ 06 апреля 2010

Он должен создать ветку, которая будет отражать вашу ветку "upstream", зафиксировать / merge / cherry-pick к ней коммиты, которые он хочет выдвинуть вверх по течению, и иногда сделать git-push ветку в вашем репо. Затем вы должны просмотреть коммиты в этой ветке и объединить их с вашей основной веткой.

0 голосов
/ 09 апреля 2010

Похоже, вы описываете рабочий процесс, в котором функция развивается одновременно с основной веткой.Ответы выше хороши, но следует отметить, что «ребаз» не всегда необходим.Особенно для новичка в git, поскольку ребаз представляет собой изменение истории, является промежуточным понятием и не всегда является тем, что вам нужно, если вы хотите сохранить информацию о том, где и когда была сделана ветвь в истории фиксации.

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

git fetch origin
git merge origin/master  # or any branch he wants to merge other than "master"

Если вы хотите получить изменения вашего друга, вы можете сделать аналогичноеоперация:

git fetch friend
git merge friend/feature  # choose any of your friend's branches to merge with your current

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

Если вы хотите выбрать только определенные ревизии из ветки вашего друга для извлечения, используйте команду cherry-pick:

git fetch friend
git log friend/feature  # or `git log friend`
# find the commit you want to cherry pick, then
git cherry-pick <commit>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...