🌟

(自分用メモ)最終課題2 ECサイト 誤ったmergeを取り消す。そしてその後、元の状態に戻す。

2022/12/30に公開

スクール課題にて、誤ってマージしました。

<感じたこと>
RubyとRailsよりもgitのほうが重要!
→masterブランチってプロダクトやん?お客様へ納入するやつやん?そこに不具合コードmergeしてはならない。

DMです、D黙って M学びましょう
https://backlog.com/ja/git-tutorial/
https://qiita.com/fukumone/items/73e1a9a62c5e4454263b

<結論:どうやって解決したか>
2段階

1、誤ってmergeしたコミットをrevertで打ち消す。

2、差分が移ってしまった各ブランチ(今回はmaster、tama)をmerge前に修正する。
重要:Gitリポジトリについてリモートとローカル必ず揃えること!
→ここがやり方がたくさんある。今回は(あまりよろしくないが)git reset --hard "コミット番号"で修正
コミット番号はgit logで確認
必ず今どこのブランチにいるか確認

<以下本文>
■現状

表題の件、最終課題2にて、PR提出→レビューを頂きました。

昨晩LGTMを頂きましたが、(2回連続でLGTMをもらう前に)mergeしてしまいました。

以下の記事を参考にrevertしました。

https://qiita.com/shungo_m/items/f6fe0e1da55414ba677c#revertしたブランチを再度prに出したい時

記事後半の「revertしたブランチを再度PRに出したい時」の「そして最後にpush」の部分(git pushする直前)でファイルが消えたことに気づきました。

以下git log --oneline記載します

■やりたいこと

mergeする直前の状態に戻したい

自己でリカバリーしようとして状況悪化させてしまいました。

2回LGTM(連続ではない)状態まで来ていたのに、年末営業最終日にこうなってしまい、残念です。

しかし、可能な限り早くもとの状態に戻したいと思います。

方法ございましたら、メンター様方にご教授頂きたいです。

■git(PRレビュー)

https://github.com/potepancamp/Hiro-Nagai/pull/3

https://github.com/potepancamp/Hiro-Nagai/pull/4

<回答>
回答
ユーザー画像
masa(メンター)

2022/12/28 15:57

直接自身で削除をしない限りファイルが無くなることはないと思います、見ているブランチが違うとかはないでしょうか?

リモートにはファイルはあるので、pullすればファイルはあると思います!

記事後半の「revertしたブランチを再度PRに出したい時」の「そして最後にpush」の部分(git pushする直前)でファイルが消えたことに気づきました。
とあるのですが、リモートの方を確認したとことまだrevertブランチをマージしていないので、今確認されているpushの手順まではできないはずです。

https://github.com/potepancamp/Hiro-Nagai/pull/4

状況が把握できないため、手順を再度確認してみてください。

また、ほかのrails課題のリポジトリなどでrevertの手順を練習してみるのも良いかもしれません。(この最終課題のリポジトリでは混乱して他の様々なコマンドを打ってほしくないため)

ユーザー画像
長井宏樹

2022/12/28 17:48

masa様

ご対応ありがとうございます。

変なところで止めても良くないと思い、上記記事を完遂する為、記事最後のgit pushまで行いました。

https://github.com/potepancamp/Hiro-Nagai/pull/3

https://github.com/potepancamp/Hiro-Nagai/pull/4

<実現したいこと>

・手元のVS codeに昨晩のマージ前の状態のファイルが欲しい

<質問>

・最終課題2について、メンター様方に提出するのはどちらのPRでしょうか(URL末尾3or4)

・以下実行しましたが、手元のVScodeに消えた各フォルダ戻らずでした。やり方が間違っているのか?

最終課題2をmerge前に戻すヒントとなるgit pullの参考サイトいただけませんでしょうか。

<やったこと>

また、ほかのrails課題のリポジトリなどでrevertの手順を練習してみるのも良いかもしれません。(この最終課題のリポジトリでは混乱して他の様々なコマンドを打ってほしくないため)

他の過去課題のリポジトリで最終課題2と同じ状況を作り、やってみました。

https://github.com/Hiro-Nagai/RT2/pull/1

https://github.com/Hiro-Nagai/RT2/pull/2

まずは、こちらのサイト(上記貼り付けと同じ)を作りました。

※記事Aとさせてください

https://qiita.com/shungo_m/items/f6fe0e1da55414ba677c#revertしたブランチを再度prに出したい時

その後、git pullの以下を参考としてpull実行しました

※記事Bとさせてください

https://eng-entrance.com/git-pull

・具体的な手順

→(記事A前半まで)github上で

①マージしてしまったPRからrevertボタンを押す

②mergeを打ち消すPRを作成する

③mergeを打ち消すPRをmergeする

→(記事A後半まで)ターミナルで

git checkout main

git pull

git checkout rt2

git merge main

git log --onelineでログ番号確認

git revert 38cfd33 -m 1

git push

→(記事B最後まで)ターミナルで

git pull origin master

git log

結果

merge前の状態に戻らずでした。

ユーザー画像
清水

2022/12/28 21:39

・最終課題2について、メンター様方に提出するのはどちらのPRでしょうか(URL末尾3or4)

提出するのはどちらでもないです!提出するのは課題2で変更したコードのみです。

https://github.com/potepancamp/Hiro-Nagai/pull/3 はマージ済PR

https://github.com/potepancamp/Hiro-Nagai/pull/4 はrevert PRなので。

手順としては

①masterを課題2のmerge前の状態に戻す

②課題2の変更が入ったブランチから戻したmasterに対してPRを作成=>提出

です。

やり方はいくつかありますが、、

https://github.com/potepancamp/Hiro-Nagai/pull/4 をmasterにマージするとmasterが

昨晩LGTMを頂きましたが、(2回連続でLGTMをもらう前に)mergeしてしまいました。

のmerge前の状態と同じになります。

その上で最新のmasterをgit pullしてそこからブランチを切って、①でmergeしたrevert commitをrevertします。

そのブランチをpushしてmasterに向けてPRを作成=>提出です。

(PRのdescriptionに誤ってマージしてしまったPRのリンクと経緯を記載頂けると助かります)

ユーザー画像
坂本(メンター)

2022/12/28 22:30

補足です

手元でレポジトリをクローンして確認しました

現在のブランチ

$ git branch

  • master

課題2ブランチ(tama)とmasterのdiff

$ git diff origin/tama --name-only
.rspec
.rubocop.yml
.rubocop_airbnb.yml
Dockerfile.dev
Gemfile
Gemfile.lock
app/controllers/potepan/products_controller.rb
app/helpers/application_helper.rb
app/views/layouts/application.html.erb
app/views/potepan/products/show.html.erb
app/views/potepan/sample/index.html.erb
app/views/potepan/shared/_footer.html.erb
app/views/potepan/shared/_header.html.erb
config/database.yml
config/routes.rb
config/storage.yml
spec/helper/application_helper_spec.rb
spec/rails_helper.rb
spec/requests/potepan/products_spec.rb
spec/spec_helper.rb

以上のから、origin/masterは課題2ブランチをrevertできている状態と推測します

推測なので、git diff origin/tamaコマンドで差分に間違いがないか、しっかり確認してください

この状態で、origin/tamaからtask2ブランチを作成し、pushしてプルリクすれば良いと思います。

尚、レビュー中に指摘があったかもしれませんが、ブランチ名とプルリク名はちゃんと意味のあるものにしてください。

ユーザー画像
長井宏樹

2022/12/28 22:53

清水様 坂本様

最後まで対応頂き、ありがとうございます。

①について内容把握し、処置完了しました。

確認したところ、masterのブランちはおっしゃる通り昨日の状態になっておりました。

②について、少々理解が足りていない部分があり、質問させてください。

その上で最新のmasterをgit pullしてそこからブランチを切って、①でmergeしたrevert commitをrevertします。

そのブランチをpushしてmasterに向けてPRを作成=>提出です。

具体的なコマンドで言うと以下の流れであっていますでしょうか。

その上で最新のmasterをgit pullしてそこからブランチを切って、

・git pull(masterブランチ上で実施)

・git checkout -b new_branch(ブランチを切るとは新たにブランチを作るという認識ですがあってますでしょうか?)

①でmergeしたrevert commitをrevertします。

・git revert tama(new_branch上で実施 ※tamaは課題2を作成したブランチ)

>そのブランチをpushしてmasterに向けてPRを作成=>提出です。

・git push -u origin new_branch(new_branch上で実施)

・github画面上で、master←new_branchでPR作成

・new_branchを提出(tamaのPRリンク経緯をdescriptionへ記載)

ユーザー画像
長井宏樹

2022/12/29 17:07

お世話になります。

以下のサイトを参考に ”git reset hard コミット番号”にてブランチtama、master(ローカル、リモートとも)ともにmerge前に戻しました。

https://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe

PRについては新たに、出させて頂きます。

Discussion