48

基本的に、修正したいオープンプルリクエストがあり、同時に2つの機能を含む1つのコミットを2つの別々のコミットにしたいです。

Githubリポジトリは次のようになります。ここで、fixは新しいブランチです。

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

修正からプルリクエストを作成しました。

次のように、修正の最後のコミットをローカルリポジトリの2つのコミットに変更したいと思いました。

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

ここで、nnは私の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つのコミットを1つにリセットしませんか?

理想的には、最後のコミットに同じコミットIDを割り当てて、現在のコミットをそのまま置き換えることができるようにします。それを行う方法はありますか?git reset(私はで実行しなかったことに注意してください--hard

4

1 に答える 1

86

その問題に直面したとき、フォースプッシュは私のために働きました:

git push --force origin fix
于 2012-04-07T13:07:11.973 に答える