2012-01-20 14 views
52

私はプロジェクトの作業を開始しました。私は元のマスターにプッシュした不要なコミットをいくつか行いました。今、私がプルリクエストをしようとすると、Githubは前のすべてのコミットをコミットしようとしています。Gitプルリクエストから不要なコミットを取り除く

私の質問は、不要なコミットを削除し、コミットしたい変更をコミットして、マスターと最新の状態にする方法です。

+0

"git rebase"を参照してください。あなたは一緒にコミットし、いくつかのコミットを残すことができます。 –

答えて

34

プルリクエストをやりたいと思っているプロジェクトのあなた自身のフォークだと思いますか?

履歴を変更する(ヘッドをリセットする)ので、 - forceフラグを使用してプッシュする必要があります。 git logを使用して、最後の正常なコミットのハッシュを探します。

は、今これはそのSHAにあなたの頭を変更し、その最後の良好なコミット以降のファイルの変更を保存します

git reset SHA 

を実行して、あなたのインデックスもリセットされます。

これで、コードを変更して、必要なコミットを行うことができます。しかし、リポジトリの履歴を変更したので、git push --forceを実行する必要があります。これは、あなたのリポジトリをフォークした人は誰もあなたからの変更を引き出すことができないことを意味します。しかし、上流にプルリクエストをすることができます。

+0

誰かが私のプルリクエストに基づいて分岐した場合、強制的に問題が発生するだけですか?あるいは、彼らが私のリポジトリから何かフォークをしているのであれば?彼らが問題のブランチを削除すると、私のリポジトリと再び同期できますか?強制的にプッシュせずにプルリクエストからコミットをきれいに削除する方法はありますか? – endolith

+1

@endolithブランチのコミットをベースにしている場合のみ。後でリベースされたコミットの子孫であるコミットは影響を受け、元のコミットがもはや存在しなくなると自明にマージできません。誰もあなたのプルリクエストをマージしたりベースしたりしない限り、あなたの完了した力があなたのプルリクエストをあなたのブランチに強制的にプッシュリクエストを変更するようにプッシュするまで、あなたはそう望みます。あなたのプルリクエストで、あなたがそれを積極的に変えていることを明確にすれば、それは起こりません。 –

+0

ブランチの変更を有効にするには、プルリクエストを開いておく必要があります –

0

git guiを使用している場合は、git guiに移動してブランチ履歴を視覚化します。 (次のステップを実行する前に、プッシュしたいローカル変更をバックアップしてください) ブランチがマスタにリセットしたいポイントまで右クリックし、リセットをクリックします。 リセット後、コマンドラインで「git push -f 」と入力します。ブランチで必要な変更を行い、もう一度commitを押します。 今すぐプル要求を作成すると、ブランチがリセットされた後に新しいコミットのみが作成されます。

関連する問題