17

私はいくつかのコミットを行い、それらをリポジトリにプッシュしました。次に、プルリクエストを実行しましたが、プルリクエストに含めたくないコミットがいくつかあることに気付きました。

彼らはこのように見えます:

My commits look like this:

Correct HTML    
ab1c41c 

HTML escaping   
8b38955 

Merge branch 'master' into internationalized    
2854662

Modified config 
b942f13 

tried pushing   
b73d792 

Added assets    
f20106e 

Added config    
408118f 

Fixed views conflicts   
86f2509 

added layouts   
da27e11 

Fixed layout markup
92d6bcc 

これらのコミットを削除したい場合:

Modified config 
b942f13 

tried pushing   
b73d792 

Added assets    
f20106e 

Added config    
408118f 

どうすればいいのですか?削除したいものよりも前にあるこれらのものを保持したいことに注意してください。

Correct HTML    
ab1c41c 

HTML escaping   
8b38955
4

3 に答える 3

26

インタラクティブなリベースを実行できます。

あなたの頭があなたの例から離れていると仮定すると、ab1c41c次のようにリベースを呼び出します

git rebase -i HEAD~7

これは、最後の 8 つほどのコミットを操作するように git に指示します。コミットのリストといくつかの指示とともにエディターにドロップされます。

削除、保存、および終了するコミットを含む行を削除します。Git がリベースを実行します。それだけです。

リベースのため、同じブランチにプッシュする場合は、オプションを渡す必要があることに注意してください--force

免責事項リベースと強制プッシュは、仕事を失ったり、人々を怒らせたりする可能性があるため、自分が何をしているのかを理解していることを確認してください。:)

于 2012-06-20T07:09:08.480 に答える
6

Blake Taylor がここで述べたように、インタラクティブなリベースを使用してコミットを並べ替える (または) 中間コミットを削除することができます。

ただし、これらのコミットを公開リポジトリにプッシュする前に、これを行う必要があります。こちら を参照してください。あなたの場合、これらのコミットは公開リポジトリで既に利用可能です。したがって、リベースの使用はお勧めしません。

これらのコミットを作業ディレクトリに入れたくない場合。

  • a) 86f2509 (作業ツリーの最後の安定したコミット) を指すブランチを作成します。

    git checkout -b <branch name> 86f2509

  • b)Cherry Pick必要なコミット。あなたの場合ab1c41c8b38955

    git cherry-pick 8b38955 ab1c41c

これで、作業ディレクトリに不要なコミットがなくなります。

于 2012-06-20T08:24:21.907 に答える
0

直前のコミットで--hardを使用してリセットするだけです。

git reset --hard 86f2509

注意:これらのコミットは永久に失われ、戻る方法はありません。また、誰かがあなたが取り除きたいコミットを引き込んだ場合、物事は厄介になるかもしれません。その場合は、おそらく「gitrevert」を確認することをお勧めします。

于 2012-06-20T05:31:39.077 に答える