間違ったパッケージアップデートを含むブランチをリバートして修正後に再びマージしたときのメモ 2022.01.25
間違ったパッケージアップデートを含むブランチをマージしたことで、アプリが正しく動かなくなってしまった。
間違ったブランチのリバートはできたが、間違いを修正して再びマージしたい。
そのままブランチを伸ばしてもリバートがマージされているため必要な差分が出ない。
リバートPRのリバートをしたあと、問題のパッケージアップデートだけをリバートするという手順を踏む。
% node -v
v14.16.0
% yarn -v
1.22.11
最初の状態。
o (main) Merge pull request <revert-wrong-package-update-branch> HEAD <- GitHubのリバートPRがマージされた
|\
| * Revert "<wrong-package-update-branch>" <- GitHubのリバートPR
|/
* Merge pull request <wrong-package-update-branch> <- やらかしたマージ
|\
| * collect package update
| * wrong package update
| * collect package update
|/
*
まずはmain
をマージして差分をなくす。
% git checkout <wrong-package-update-branch>
% git merge --no-ff main
o Merge branch 'main' into <wrong-package-update-branch> HEAD <- 差分がmainと同じ
|\
| * (main) Merge pull request <revert-wrong-package-update-branch> <- 次にこれをリバートしたい
| |\
| | * Revert "<wrong-package-update-branch>"
| |/
| * Merge pull request <wrong-package-update-branch> <- この時点の差分と同じにしたい
| |\
| |/
|/|
* | collect package update
* | wrong package update
* | collect package update
|/
*
次にGitHubのリバートPRのマージコミットをリバート。-m 1
オプションで間違いを含むマージコミットのほうを選ぶ。
% git revert <revert by github> -m 1
o Revert "Merge pull request <revert-wrong-package-update-branch>" HEAD <- 差分が復活する(間違いはそのまま)
* Merge branch 'main' into <wrong-package-update-branch>
|\
| * (main) Merge pull request <revert-wrong-package-update-branch>
| |\
| | * Revert "<wrong-package-update-branch>"
| |/
| * Merge pull request <wrong-package-update-branch>
| |\
| |/
|/|
* | collect package update
* | wrong package update <- 次にこれをリバートしたい
* | collect package update
|/
*
ここでyarn.lockがコンフリクトしたので、今のpackage.jsonで強制的に更新。
% yarn install --check-files
% git add .
% git commit
さらに間違ったアップデートを行ったコミットもリバート。
% git revert <wrong package update>
o Revert "<wrong package update>" HEAD <- 間違ったコミットもリバートされた
* Revert "Merge pull request <revert-wrong-package-update-branch>"
* Merge branch 'main' into <wrong-package-update-branch>
|\
| * (main) Merge pull request <revert-wrong-package-update-branch>
| |\
| | * Revert "<wrong-package-update-branch>"
| |/
| * Merge pull request <wrong-package-update-branch>
| |\
| |/
|/|
* | collect package update
* | wrong package update
* | collect package update
|/
*
これで、ふたたびmain
に対してPRを出せばよい。
参考