2013-04-19 2 views
2

Примечание: Я знаю git push -f Вопросы распространены, но я действительно не мог легко найти ответы на этот конкретный вопрос в любом месте. Я хочу получить исчерпывающий ответ, а не только то, что несколько решает мою проблему. В конце вопроса я предлагаю решение самостоятельно.git push -f: Как убедиться, что другие люди догоняют?

Я ввел некоторые изменения в ветку, я не должен (на работе). У меня уже есть git revert 'изменения, но один из координаторов команды хотел, чтобы я действительно git reset <old commit> && git push -f, чтобы история не была загромождена ревертом. Немногие люди используют эту ветку, поэтому мы думали, что это стоит того риска.

Это работало, но я боюсь, что люди, которые уже вытащили мои коммиты, могут случайно ускорить переадресацию удаленной ветви, так как история еще не расходилась (я только что переустановил старую фиксацию, но didn ' t сделать любую другую фиксацию поверх этого).

Я заметил, что если я git reset <old HEAD commit> && git status, Git говорит, что пара совершает впереди origin/<branch>, поэтому я уверен, что если я git push снова, Git будет только быстро пересылать.

git pull говорит, что репо является актуальным и не отступает (что, я думаю, не обязательно). Но тогда, что я должен сделать, чтобы убедиться, что все возвращаются в правильное HEAD на origin/<branch> и работают оттуда? Нужно ли спрашивать у всех git reset origin/<branch>, прежде чем возобновлять работу над этой ветвью? Я действительно хотел что-то более легкое и менее подверженное ошибкам (они могут забыть это сделать).

Я знаю, что не должен быть git, перезагружающий ветку на общем репо, но вы знаете, как это происходит ... Иногда вы просто чувствуете себя авантюристами, или, может быть, ваш начальник попросил вас сделать это, и вы знаете, что это неправильно, но в любом случае это может быть образовательный опыт: P

ответ

3

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

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

Для чистых извлечений разделяемой отрасли:

git reset origin/<branch> 

должен сделать трюк.

Если кто-то уже построил ветку поверх плохой фиксации, необходимо будет удалить плохой фиксатор из локальной истории, чтобы предотвратить повторное нажатие вверх по потоку. Это может быть достигнуто с помощью git rebase с интерактивной опции:

git rebase -i origin/<branch> 

Это предоставит пользователю список коммитов в местный филиал, так как он отклонился от вверх по течению. Плохая фиксация появится в этом списке и должна быть удалена.

+0

Правильно, но что именно я должен сказать им делать, если они попали в неправильную ГОЛОВУ или совершили историю? Должен ли я просто сказать им «git reset origin/'? Убедившись, что их собственные изменения сохранены в патче, прежде чем, конечно, чтобы они могли повторно применить их к правильной истории фиксации. –

+0

Я думаю, что это почти окончательный ответ, можете ли вы указать, как быть уверенным, что только законные коммиты переустанавливаются?Как указать диапазон коммитов для rebase? –

+0

О, '-i' делает его интерактивным, поэтому я могу выбрать, что нужно переустановить. Спасибо, я добавлю это к вашему ответу. –

Смежные вопросы