Git ветвится из старой ревизии и откатывает текущую ветку - PullRequest
5 голосов
/ 04 ноября 2010

Я не очень хорошо знаю Git, и для одного из наших репозиториев я допустил ошибку.

Я зафиксировал и отправил изменения в ветку с именем "core".Но потом я понял, что мои изменения не должны быть там - я должен был создать новую ветку несколько ревизий назад, скажем, «core-экспериментальный».

Но теперь я хочу изменить его на

A---B              "core"
    \
     C---D---E     "core-experimental"

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

Ответы [ 3 ]

9 голосов
/ 04 ноября 2010

Два других ответа работают нормально, но вы можете избежать необходимости что-либо делать в своем дереве работы:

# create core-experimental using core as starting point
git branch core-experimental core
# move core
git branch -f core <SHA1 of B>

Таким образом, вы можете сделать это, даже если у вас есть локальные изменения в рабочем дереве, и не обновлять кучу временных меток во время извлечения / сброса, что заставит вас пересобрать (при условии, что это скомпилированный проект). *

6 голосов
/ 04 ноября 2010
git checkout core
git branch core-experimental
git reset --hard <SHA of B>
git push -f <remote> core

Или более информативно ...

  1. Извлечь ядро ​​
  2. Создать экспериментальную ветку в HEAD ядра
  3. Сбросить HEAD ядра обратно туда, куда вы хотитеэто
  4. принудительное нажатие на обновление ядра
1 голос
/ 04 ноября 2010

В ядре:

git branch core-experimental
git reset --hard <revision-B>

А затем:

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