Rebase фиксирует на удаленной ветке - PullRequest
1 голос
/ 16 октября 2011

Я разработал проект на github, создал новую ветку и внес некоторые изменения (коммиты B, C и D), поэтому у меня было следующее дерево:

... <-- A                     (master)
         \
          B <-- C <-- D       (branch2)

Я ошибочно слил и удалил branch2, так что теперь у меня есть это дерево:

... <-- A <-- B <-- C <-- D   (master)

Однако я понял, что хочу сохранить ветку master, которая отражает изменения в восходящем потоке, и создал myproject-master для моей работы над этим. Я переместил свои коммиты, переместив их в эту новую ветку. После ребазинга я удалил часть <-- B <-- C <-- D из истории на мастере с помощью git reset --hard "A". Я также получил квадраты C и D и теперь буду называть этот коммит CD. Моя проблема в том, что я не могу перенести свои изменения на master, и у меня есть разные деревья в локальной и удаленной среде:

Это локальное дерево (что я хочу иметь с обеих сторон):

... <-- A                     (master)
         \
          B <-- CD            (myproject-master)

Это удаленное дерево:

... <-- A <-- B <-- C <-- D   (master)
         \
          B <-- CD            (myproject-master)

Когда я пытаюсь нажать на master, git отклоняет push, чтобы я не потерял данные. Это нормально, но у меня уже есть эти коммиты в другой ветке, и я хотел бы очистить их от мастера. Как я могу это сделать?

1 Ответ

2 голосов
/ 16 октября 2011

Если вы являетесь единственным человеком, работающим с репозиторием, то можно безопасно «принудительно переместить» вашу основную ветку в удаленный репозиторий, например, с:

git checkout master
git push -f myrepo master

... но поскольку это переписывает историю основной ветки, вам нужно быть более осторожным, если у вас есть соавторы, которые уже вытянули ваш master, когда он опережал A.

...