По сути, у меня есть открытый пулреквест, который я хочу исправить, и в то же время я хочу сделать 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
)