質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Q&A

解決済

2回答

841閲覧

githubで誤って作成してしまったプルリクエストのコミットを取り消す方法

uni_chi_

総合スコア16

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

0グッド

0クリップ

投稿2023/12/27 14:15

編集2023/12/27 14:17

実現したいこと

githubでプルリクエストを誤って作成してしまいました。
3つのコミットがあるのですが、そのうちの2つは前回の改善箇所のため不要なので取り消したいです。

発生している問題・分からないこと

色々自分でも調べて試してみたのですが、どうしてもうまくいかず質問させていただいている次第です。
ご教示いただけますと幸いです。
宜しくお願いいたします。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

git rebase -i HEADを試すといいとの記事があったため、コードを試してみたのですが、
ずらっとコメントが入っているキーボードの何を押しても閉じることのできない悪夢のような謎の画面が開いてしまい上手くいかなかったです。
ほかにもfetchを使う方法等色々調べて出てきたものを片っ端から試しましたが、自分のやり方が悪いのか上手くいかず、困っています。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/12/27 16:27

新しいブランチを作って、必要なコミットをチェリーピックするとか?
guest

回答2

0

ベストアンサー

git rebase -i HEADを試すといいとの記事があったため、コードを試してみたのですが、
ずらっとコメントが入っているキーボードの何を押しても閉じることのできない悪夢のような謎の画面が開いてしまい上手くいかなかったです。

コメントを読みましょう。

$ git rebase -i HEAD~3 pick aaaaaaaaa なんたらかんたら pick bbbbbbbbb なんたらかんたら pick ccccccccc なんたらかんたら # Rebase ddddddddd..ccccccccc onto ddddddddd (3 commands) # # Commands: # p, pick <commit> = use commit # r, reword <commit> = use commit, but edit the commit message # e, edit <commit> = use commit, but stop for amending # s, squash <commit> = use commit, but meld into previous commit # f, fixup [-C | -c] <commit> = like "squash" but keep only the previous # commit's log message, unless -C is used, in which case # keep only this commit's message; -c is same as -C but # opens the editor # x, exec <command> = run command (the rest of the line) using shell # b, break = stop here (continue rebase later with 'git rebase --continue') # d, drop <commit> = remove commit # l, label <label> = label current HEAD with a name # t, reset <label> = reset HEAD to a label # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>] # create a merge commit using the original merge commit's # message (or the oneline, if no original merge commit was # specified); use -c <commit> to reword the commit message # u, update-ref <ref> = track a placeholder for the <ref> to be updated # to this position in the new commits. The <ref> is # updated at the end of the rebase # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted. #

これを使ってローカル側で不要なコミットを履歴から削除してしまうことができます。

その前にまず、gitのコマンドラインを使ったことがあるのなら、作業中にエディタが起動してくる場面はあったと思います。エディタで何も変更を加えずに終了すれば、なにもおこりませんから安心してください。
ただ、どのようなエディタが起動するようになっているかは環境によって異なりますので、「何も変更を加えずに終了」などの操作方法はこちらで回答できません。今までエディタが起動するような使いかたを全くしてこなかったということなら、周りのひとにエディタの使い方を尋ねてください。

さて、不要なコミットを履歴から削除する方法ですが、簡単です。コメントをよく読めば書いてありますが、不要なコミットの行の「pick」を「drop」に書き換え、変更を保存してエディタを終了させるだけです。

エディタが終了したら、git logで不要なコミットが削除されたか確認してみてください。なお、削除されたコミットは復元できませんので、不安があればいつでもエディタで変更を保存せずに終了し、最初からやり直してください。

そして、不要なコミットを削除したブランチを再度git pushでpushします。ただし、コミットを削除したことによてローカルとリモートでheadが一致しなくなっているので、通常のpushは拒否されます。-fオプションをつけてリモートブランチを上書きする必要があります。

GitHubのプルリクエストには、コミット履歴に

@a-user force-pushed the a-branch branch from aaaaaaa to eeeeeee ... Compare

といったものが追加され、強制pushの前後の差分を見ることができます。また削除されたコミットはコミット履歴から消えます。


これで、PR上の不要なコミットを削除することはできます。ただ、一旦提出したPRの内容を変更してしまうので、レビュアの方を混乱させる可能性もあります。プルリクエストのページでコメントを投稿するなどして「強制pushしました」と明示的に知らせたほうがよいと思います。

また、プロジェクトによってはPR提出後の再pushや追加コミットを禁止している場合もあると思うので、その場合はプロジェクト関係者にどうすればいいか聞いてください。

投稿2023/12/30 00:09

編集2023/12/31 05:18
ikedas

総合スコア4443

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

3つのコミットがあるのですが、そのうちの2つは前回の改善箇所のため不要なので取り消したいです。

単純にリジェクトしてもらうほうが手っ取り早そうなのですが、それではどういった問題があるのでしょうか?

投稿2023/12/29 11:54

maisumakun

総合スコア146532

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問