web-dev-qa-db-ja.com

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

プルリクエストを行いましたが、その後、ローカルでプロジェクトにコミットし、プルリクエストの汚染を終了しました。

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

強調表示されたコミットは、他のすべてのものを保持および削除する必要があるものです。私はいくつかのものをマージするので、これは履歴の4番目のコミットになります。

enter image description here

私のgitログ enter image description here

誰かが何が起こっているのか、この問題をどのように修正するのか説明してください。

62
humazed

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

この投稿-復帰に関する部分を読んでください は、私たちが何をしたいのか、どうやってやるのかを詳細に説明します。

問題に対する最も簡単な解決策は次のとおりです。

# 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>

元に戻すコマンドは、元のコミットのundoで新しいコミットを作成します。

69
CodeWizard

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

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

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n //ここでnは、対話型リベースに含める最後のコミットの数です。

  3. 破棄するコミットのpickdropに置き換えます。
  4. 保存して終了。
  5. git Push --force
43
ferit

次のようにします、

ブランチ名が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. >

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

1

コミットを削除して、その変更を保持したくない場合は、@ feritが適切なソリューションを提供します。

そのコミットを現在のブランチに追加したいが、現在のprの一部として意味をなさない場合、代わりに以下を行うことができます:

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

これで、リモートからコミットが削除されましたが、ローカルでの変更は引き続き保持されます。

0
John