Принудительная перебазировка Git - PullRequest
4 голосов
/ 29 июля 2011

Вариант использования: три клона git одного и того же хранилища A, B, B2.Репо А и В нормальные, В2 голый (сделано с --bare).Все под моим контролем, т.е. есть только один пользователь.

На сайте B я делаю работу (несколько коммитов git), затем git push B2.

  • На сайте A, gitтянуть B2.
  • На сайте A, git rebase -i xx..HEAD, чтобы раздавить некоторые коммиты и очистить историю (отличная команда).
  • Q: Как передать результат на сайт B?

Я могу сделать:

  • git push --force B2

Но это не совсем верно.У рабочего каталога сайта B будет странная история после git pull B2.

Мне нужен какой-то способ не использовать --force.Я хотел бы выбросить xx..HEAD на B2, затем нажать обычным образом от A. Возможно:

На B2 (голый репо)

  • git reset --hard xx

Не уверен, что этого достаточно.Я могу сделать это путем повторного клонирования с сайта A (удалить B2, git init --bare, push from A), но это кажется излишним. Как пушить / тянуть пост Git rebase кажется уместным, но я надеюсь на какой-то ответ, кроме "не делай этого".

Итог, как мне правильно и полностьювыбросить коммиты на В2, чтобы переназначенная история из А будет приниматься как новые коммиты?

Ответы [ 2 ]

4 голосов
/ 29 июля 2011
 git reset --hard 

выбрасывает коммиты в том смысле, в каком вы хотите, чтобы они были выброшены.

1 голос
/ 29 июля 2011

Мне нужен какой-то способ не использовать --force.Я хотел бы выбросить xx..HEAD на B2, затем нажать обычным образом от A.

Гм, выбросить xx..HEAD на B2, затем обычное нажатие от A является почти точнымопределение --force.Просто используйте --force еще раз, когда вы тянете к B, и все будет в порядке, если вы перебираете все ветви в B назад, чтобы зафиксировать xx или ранее, прежде чем вытащить.

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