Как отправить новую (переписанную)историю в удаленный репозиторий

По сути, у меня есть открытый пулреквест, который я хочу исправить, и в то же время я хочу сделать 1 коммит, содержащий 2 фичи, в 2 отдельных коммита.

Репозиторий Github теперь выглядит так, где исправление — это новая ветка.:

master c-c-c
            \
     fix c-c-c-c

Я создал запрос на извлечение из исправления.

Я хотел изменить последний коммит в исправлении на 2 коммита в моем локальном репозитории следующим образом:

master c-c-c
            \
     fix c-c-c-n-n

где n-n — мои 2 новых коммита.

Чтобы добраться до этой точки локально, я сделал это:

1. git rebase -i HEAD~2
2. Changed my last commit line to "edit", saved and closed the file
3. git reset HEAD^
4. git stash save
5. Removed the changes I don't want in the first commit
6. git commit -m "commit a" -a
7. git stash apply
8. git commit -m "commit b"

Итак, теперь у меня есть 2 коммита, как я хочу. Проблема в том, что я нашел ошибку, которая оказалась в запросе на вытягивание. Поскольку я уже отправил данные в удаленный репозиторий, он не примет мои новые коммиты (, так как исходный теперь отсутствует).

Я запускаю:

git push origin fix --dry-run

и получаю сообщение:

To git@github.com:<UserName>/<Repository>.git
! [rejected]        fix -> fix (non-fast-forward)
error: failed to push some refs to 'git@github.com:<UserName>/<Repository>.git'

Я видел другие сообщения, предлагающие вытащить мои изменения из источника, прежде чем отправлять их снова, но разве это не сбросит мои 2 коммита обратно в один?

В идеале я хотел бы назначить тот же идентификатор коммита для последнего коммита, чтобы он мог заменить текущий как есть. Есть ли способ сделать это? (Обратите внимание, что я не запускал git resetс--hard)

37
задан NightOwl888 7 April 2012 в 12:45
поделиться