Counts the Clouds

間違ったパッケージアップデートを含むブランチをリバートして修正後に再びマージしたときのメモ
2022.01.25

Git
GitHub
yarn

katerina-kerdi--YiJvbfNDqk-unsplash.jpg

間違ったパッケージアップデートを含むブランチをマージしたことで、アプリが正しく動かなくなってしまった。

間違ったブランチのリバートはできたが、間違いを修正して再びマージしたい。

そのままブランチを伸ばしてもリバートがマージされているため必要な差分が出ない。

リバート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を出せばよい。

参考