Подтвердить что ты не робот

Git - перемещение переносится в другую ветку

Недавно мой босс решил опробовать группу аутсорсинга "для увеличения емкости", поскольку мы модифицируем существующее приложение для добавления новых функций. Несмотря на мою обеспокоенность тем, что группа, которую он выбрал, не очень хорошо общалась и не задавала достаточно вопросов, чтобы по-настоящему понять и быть эффективной, мы все равно пошли с ними.

Мы установили их для совместной работы в нашем репозитории Git (размещенном на GitHub). Мы создали ветку только для них (TheOutsourcedBranch, мы ее назовем) и попросили, чтобы они выполнили всю свою работу в этой ветке.

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

Сегодня они толкнули в первый раз. Пять коммитов, все они у мастера. Я пытаюсь понять, как переместить свои коммиты от мастера в TheOutsourcedBranch, не теряя работу, которую они сделали (хотя, по внешнему виду, нам все равно придется выбросить ее).

Visual Reference -- Orange dots are their commits, gray are mine.

Оранжевые точки - это их фиксации, серые точки - мои.

Я знаю, что есть вопросы о перезагрузке (и это может быть то, что мне нужно сделать здесь), но мне сложно определить, какие из них относятся к моему конкретному делу. И в случае, если это имеет значение, группа аутсорсинга и я - единственные люди, которые действительно используют репо прямо сейчас.

Спасибо заранее!


Edit: Возможно, я нашел то, что искал: Перенесите последние фиксации (ов) в новую ветку с помощью Git

Я бы хотел проверить мое понимание. Локально я создаю ветку от мастера (TheOutsourcedBranch), который будет содержать все A-H. Затем я reset вернусь к C. Мастер теперь будет содержать A-C.

Предполагая, что это правильно, это было бы хорошо для меня (локально). Но что мне нужно сделать, чтобы "заставить" удаленный репозиторий (GitHub) принять мое локальное представление о том, как все происходит и отбрасывает свою версию истории?

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

4b9b3361

Ответ 1

Получение ветки легко:

git branch their-branch master
git reset --hard master $SHA1_OF_C
git push --force $SHARED_REPO_REMOTE

Это перепишет историю; он создает новую ветвь, эквивалентную текущей главной ветки с именем their-branch, а затем сбрасывает ваш локальный мастер, чтобы указать на случайный SHA1 (... или ветвь, или тег или что-то еще), и, наконец, принудительно обновляет удаленный репозиторий чтобы соответствовать вашему локальному ветку.

Это обеспечивает именно то, что вы хотите.

Предостережения: это перепишет историю и может испортить всех, кто построил старый мастер. Следите за проблемами слияния.

Нет необходимости в восстановлении или необходимости.

(В качестве стороннего предложения я предлагаю вам либо предоставить им промежуточный репозиторий, либо заставить их использовать git send-email, либо использовать запросы на выгрузку GitHub, либо иным образом запретить им нажимать на мастер, пока они не поймут это правильно. ваше резюме, может быть, некоторое время.)

Ответ 2

Попросите их отделить каждую битку от одной и той же начальной точки за каждый билет, на котором они работают. Попросите их объединить работу с веткой RC. Вы можете объединить свою работу с ветвью RC. Это позволит вам часто тестировать. См. Рабочий процесс, который мы имеем здесь:

https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR

Сообщите мне, если у вас есть какие-либо вопросы по этому поводу. Это хорошо работает для нас.