プルリクエストからコミットを削除する方法


103

私はプルリクエストを行いましたが、その後、ローカルでプロジェクトにいくつかのコミットを行い、プルリクエストを汚染しました。それを削除しようとしましたが、運がありませんでした。

StackOverflowで同様の質問をいくつか見つけましたが、そこにあるものを適用できません。これはGitHubでの最初のプルリクエストなので、これがどのように機能するのか私には少し奇妙です。

ハイライトされたコミットは、他のすべてのものを保持して削除する必要があるコミットです。私はいくつかのマージを行うので、これは歴史上4番目のコミットになります。

ここに画像の説明を入力してください

私のgitログ ここに画像の説明を入力してください

誰かが何が起こっているのか、そしてこの問題を修正する方法を説明できますか?


2
リベースする必要があり、「added from github」コミットのみを「選択」する(つまり、他のすべてのコミットの行をコメント化する)
Robbie Averill

1
どのブランチにどのブランチをリベースできるか、さらに説明を追加してください。
2016年

what branch=作業中onto what branchのブランチ、=プルリクエスト先のブランチ
Robbie Averill 2016年

@Robbie Averillが示唆したことを私の回答で説明しました。これを説明する答えを今まで誰も書いていないのは奇妙です。
18

回答:


107

それを行うにはいくつかのテクニックがあります。

この投稿-復帰に関する部分を読んで、私たちが何をしたいのか、そしてそれをどのように行うのかを詳しく説明します。

ここにあなたの問題の最も簡単な解決策があります:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

revertコマンドは、のコミットを取り消して新しいコミットを作成します。


2
他の人からプロジェクトをフォークし、プルリクエストでコメントを削除したい場合でも機能しますか?
Dr.jacky 2017

104

人々は、間違ったコミットを確認したり、間違ったコミットの変更を元に戻すためにコミットを元に戻したりしたくありません。これはコミット履歴を汚染します。

コミットを元に戻して変更を取り消す代わりに、間違ったコミットを削除する簡単な方法を次に示します。

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n// nは、インタラクティブなリベースに含める最後のコミットの数です。

  3. 交換するpickdrop、あなたが破棄したいコミットのために。
  4. 保存して終了。
  5. git push --force

8
これは魅力のように私のために働いた。私はPRに含めるべきではなかったたくさんのコミットをしました。私は対話的にそれをリベースし、それらのコミットをドロップしてプッシュし直しました
FullStackEngineer

1
とにかく、PRを開始する前にリモートマスターと同期する必要があります。
18

5
プッシュするために私はしなければなりませんでした:git push origin HEAD:myBranch --force。しかし、それ以外の場合は素晴らしいと役立つ。
ScottyBlades 2018

@ScottyBladesその部分は範囲外であるため、意図的に省略しました。トラッキングブランチを設定しなかった場合は、設定するか、設定したように明示的にプッシュする必要があります。
18

4
これは、GitHubで開いているPRを修正したい場合にも役立ちます。強制プッシュを実行できるようにする必要があるだけです
Vladimir Hidalgo

6

コミットを削除していて、その変更を保持したくない場合は、@ feritが適切な解決策になります。

そのコミットを現在のブランチに追加したいが、現在のprの一部であることに意味がない場合は、代わりに次の操作を実行できます。

  1. 使用する git rebase -i HEAD~n
  2. 削除するコミットを一番下(最新)の位置にスワップします
  3. 保存して終了
  4. git reset HEAD^ --soft変更をコミット解除し、ステージングされた状態に戻すために使用します。
  5. git push --forceコミットを削除せずにリモートブランチを更新するために使用します。

これで、リモートからコミットが削除されましたが、ローカルには変更が残っています。


2

したがって、次のようにします

ブランチ名がmy_branchで、追加のコミットがあるとします。

  1. git checkout -b my_branch_with_extra_commits (このブランチを別の名前で保存する)
  2. gitk (gitコンソールを開きます)
  3. 保持したいコミットを探してください。そのコミットのSHAをメモ帳にコピーします。
  4. git checkout my_branch
  5. gitk (これによりgitコンソールが開きます)
  6. 元に戻したいコミット(変更前の状態)を右クリックして、「reset branch to here」をクリックします。
  7. する git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

次に、ローカルブランチのコミット履歴を見て、すべてが正常に見えることを確認します。


0

これは私を助けたものです:

  1. 既存のブランチを使用して新しいブランチを作成します。既存のものbranch_oldと新しいものをと呼びましょうbranch_new

  2. branch_newコミットにまったく問題がなかったときに、安定した状態にリセットします。たとえば、ローカルマスターのレベルに配置するには、次のようにします。

    git reset —ハードマスターgit push —強制的に原点

  3. cherry-pickからbranch_oldへのコミットbranch_new

  4. git push
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.