Flutter note

Git で不具合入りのプルリクがマージされてしまったけどその不具合ブランチだけ伐採したい

Flutterで、iOSのLuncherに画像をセットして、ぷるりくした→まーじしてもらった、のですが、動かなかったようでして...(すみませんです)

ぅう〜んと〜

そのブランチだけ、修正したいのだけど...いきなり git reverで良いのかな?

ふむ、不具合入りの最新masterを落としてきて、なかったことにしたいブランチを、revertで伐採すると....

https://qiita.com/RyoU24/items/e37c7242544fd1da81be

↑教えてもらった。

ということで、やってみよう。

「git log」で commit idを調べる。

$ git log
:
:
commit a5a1460eea9186c26533ba1300880d262f17ba8a (origin/feature/misato-20200825-luncher, feature/misato-20200825-luncher)
Author: 私 <私@gmail.com>
Date:   Wed Aug 26 01:42:08 2020 +0900

    set home app icon.

commit 5be75a858bc8916b1db0c4126bb0d74b7f7bb943 (origin/feature/misato-20200825, feature/misato-20200825)
Author: 私 <私@gmail.com>

commit a5a1460eea9186c26533ba1300880d262f17ba8a (origin/feature/misato-20200825-luncher, feature/misato-20200825-luncher)

↑これが、不具合起こしたブランチ。マージされちゃったやつ。(伐採するやつ)

commit 5be75a858bc8916b1db0c4126bb0d74b7f7bb943 (origin/feature/misato-20200825, feature/misato-20200825)

↑これに戻すんだけど。どっちのIDを指定するのだ?(a5a1460eea9186c26533ba1300880d262f17ba8aで良いっぽい)

①「q」で、got log を抜けて、masterに切り替える。

$ git checkout master
M       ios/Runner.xcodeproj/project.pbxproj
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

M ってなんだ?

M ios/Runner.xcodeproj/project.pbxproj

(ブログに書くから調べるのであって、たぶん書かなかったらスルーしている)

こちらのサイトによると...

$ git status -s
 M README
MM Rakefile
A  lib/git.rb
M  lib/simplegit.rb
?? LICENSE.txt

まだ追跡されていない新しいファイルには`??`が、ステージングエリアに追加されたファイルには`A`が、変更されたファイルには`M`が、といったように、ファイル名の左側に文字列が表示されます。 内容は2文字の組み合わせです。1文字目はステージされたファイルの状態を、2文字はファイルが変更されたかどうかを示しています。 この例でいうと、`README`ファイルは作業ディレクトリ上にあって変更されているけれどステージされてはいません。 `lib/simplegit.rb`ファイルは変更済みでステージもされています。 `Rakefile`のほうはどうかというと、変更されステージされたあと、また変更された、という状態です。変更の内容にステージされたものとそうでないものがあることになります。

ふむふむ、ということは、さっきのMのやつは

ステージされていて、かつ変更されたファイル。

が、残っているよ!ということ。多分「git pull origin master」が失敗する。

②最新のリモートmasterブランチを、ローカルmasterブランチにマージする。

$ git pull origin master
:
:
error: Your local changes to the following files would be overwritten by merge:
        ios/Runner.xcodeproj/project.pbxproj
Please commit your changes or stash them before you merge.
Aborting

失敗した。

「git reset --hard HEAD」

不要な変更を、以前教わった「なかったことにする」魔法のコマンド.... を実行する。人生においてもこの魔法があったら素晴らしいのに...バック・トゥ・ザ・フューチャー🚀🚀🚀

$ git reset --hard HEAD
HEAD is now at 3d1b36c child

再度「git pull origin master」を実行したら、うまくいきました。

③不具合ブランチの伐採

revert: 指定したコミットハッシュを打ち消すコミットを新たに行う

教えてもらったサイトには

(4)マージコミットを取り消したい」の章に「revertしようとしたコミットがマージコミットだった場合には、m(mainlineオプション)をつける必要があります。と書いてあったけど、オプションなしでもOKみたい。

git show してみ?と言われたのでやってみるばい..

変更前のshow

$ git show
commit af0226a64455243c1d608140c54fbd7589fcfb86 (HEAD -> master, origin/master, origin/HEAD)
Merge: 3d1b36c 9fdc0e0
Author: hoge hoge <hoge@hoge>
Date:   Fri Aug 28 05:35:18 2020 +0900

    Merge pull request #110 from fugafuga/feature/misato-20200827-luncher
    
    Set luncher image.

新しいブランチを作成し、git revert する。

git revert a5a1460eea9186c26533ba1300880d262f17ba8a
Removing ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
Removing ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
:
:

変更後の git show

diff --git a/pubspec.yaml b/pubspec.yaml
index 427d83d..8db13bd 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -33,16 +33,11 @@ dependencies:
   scoped_model: 1.0.1
   provider: ^4.0.2
   flutter_svg: ^0.17.0
-  flutter_launcher_icons: ^0.7.5
 
 dev_dependencies:
   flutter_test:
     sdk: flutter
 
-flutter_icons:
-  # android: "launcher_icon"
-  ios: true
-  image_path: "assets/icons/ic_app.png"

「+++ b/pubspec.yaml」変更したよ、「- flutter_launcher_icons: ^0.7.5」これ消えてる感じでcommitしたで〜

という感じ、と理解した。

この状態で一度、エミュレータを動かし、変更が戻ってるか確認...→ 戻っていた。(実を言うと違うブランチをrevertしてしまったので、revertしたときのcommitをもう一度revertした。git しゅごい...)

④ で一応、git statusで状態確認して、add とか commit せずに、pushを実行。

⑤ GitHub上で、プルリクした。←いまココ

⑥ 不具合が戻ってるか確認してもらって、OKだったらmasterをpullする。

⑦ またブランチをきって、修正やりなおし。

という感じ。

Git中級者への道のりはながい....

そして、いつもアドバイスくれるエンジニア氏、仕事でもないのに貴重なお時間割いて教えていただいてありがとうございます。

自分も貢献できる立場の人間にならなければ...

追記

なんだかんだ、ごちゃごちゃ操作してしまったのですが、revertは1回のみでOKだったみたい。(4回もrevertしてしまった..)

ふぉ〜、ローカルがぐちゃぐちゃになったかもー、どすりゃいいんだ〜〜〜〜🥶

とか、そんな心配は無用だったようで、プルリクしたブランチとは別に、もう一度

  1. masterにもどる。
  2. Newブランチを作る。
  3. git revert {commit id}
  4. pushする。

だけで良かった...

勉強になった..

-Flutter, note