2012-04-07 8 views
29

基本的には、オープンプルリクエストを修正したいと同時に、2つの機能を含むコミットを2つの別個のコミットにしたいと思っています。新しいリポジトリへの書き換え方法

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

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

私は修正からプル要求を作成しました。

私は次のように最後は私のローカルリポジトリにコミット2に修正してコミット変更したい:

のn-nは私の2つの新しいコミットしている
master c-c-c 
      \ 
    fix c-c-c-n-n 

を。

ローカルでこの時点に到達するために、私はこれをしなかった:

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 [email protected]:<UserName>/<Repository>.git 
! [rejected]  fix -> fix (non-fast-forward) 
error: failed to push some refs to '[email protected]:<UserName>/<Repository>.git' 

私は他の記事を見てきましたが、再びプッシュする前に、原点からの私の変更をプルすることをお勧めしますが、基本的になるではないこと私の2つのコミットを元に戻しますか?

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

答えて

60

、力のプッシュは私のために働いている:

git push --force origin fix 
+1

を魔法のように働いたこと。誰かがこれを読んでプルリクエストに何が起こったのか不思議に思った場合、単に1コミットを2に置き換えただけです。プロジェクトオーナーにGithub氏のコメントを追加して、彼がすでに完了している場合に備えてフェッチするようにしました。 – NightOwl888

+0

これを明らかにするには、プロジェクトオーナーがプルリクエストを既にマージしていて、その後に 'git push --force origin fix'を実行した場合、プロジェクトのオーナーから' git fetch '修正? – PonyEars

+4

コミットがブランチにまだ残っているので、プロジェクトオーナーは変更が既に取得されている場合はリセットを行う必要があります。 'git fetch origin'を実行し、' git reset --hard origin/master'を実行します。参照してください:http://stackoverflow.com/questions/1628088/how-to-reset-my-local-repository-to-be-just-like-the-remote-repository-head – NightOwl888

関連する問題