Как сделать git rebase, используя вместо имени ветки хеш? - PullRequest
5 голосов
/ 29 июня 2011

Я использую git rebase --onto target source foo, чтобы переместить ветку foo из ветви source в ветку target. Знаете ли вы, можно ли использовать хеш-значения вместо названий ветвей (если они не указаны), например: git rebase --onto ab91c f4242 foo?
В качестве обходного пути я временно добавил имена веток в соответствующие объекты коммитов. Но это может быть лаваш, если у вас много веток, которые нужно перебазировать.

Пример ситуации:

° bb42a
° ab91c
° 979c2
          /° fb648 foo
° f4242 --
° 333c9

После git rebase --onto ...

° bb42a
          /° fb648 foo
° ab91c --
° 979c2
° f4242
° 333c9

Справочная информация:
Объясненная проблема очень распространена, если вы используете svn-сервер в качестве удаленного хранилища. Все объекты, которые вы фиксируете, переписываются, поскольку svn-id будет добавляться каждый раз, когда вы git svn dcommit добавляете в svn-репозиторий. Это отделяет все остальные ветви от их прежнего master .

1 Ответ

4 голосов
/ 29 июня 2011

В чем уверен:

  • a git rebase (не git-svn rebase) может принять любой допустимый коммит в качестве аргумента, поэтому хеш-значения будут работать.
  • Раздел предостережения из git-svn предупреждает вас о:

избегать всех git clone / pull / merge / push операций между репозиториями git и ветками.
Рекомендуемый метод обмена кодом между ветками git и пользователями - git format-patch и git am, или просто 'dcommit' в репозиторий SVN.

Так что вам нужно убедиться, что вы не вводите коммиты в SVN-синхронизированную ветку, которая не будет знать об этом коммите и будет сообщать об этом.
(у вас обратный случай в вопросе SQ "git svn - <file> не был найден в коммите <hash>")

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