Site icon imageMichio BLOG

forkしたレポジトリでオリジナルと自分のカスタマイズ用とを独立して管理する

このブログの構築はastro-notion-blogを利用させていただいていますが、これまでオリジナルからforkして、自分のアカウントのmainブランチでカスタマイズして使っていました。(Git初心者の私には、当初その方法しか思いつかなかった…)

しかし、その方法ではfork元にPull Requestを出した際に、自分のカスタマイズ用のコミットも含まれてしまうことに気づきました。当然、Pull Requestを受けた側も困惑するでしょう。

それを解決するためにやったことを自分用のメモとして、ここに記します。

やりたかったこと

  • mainブランチにある自分がカスタマイズしたコードとその履歴は触りたくない。
  • fork元にPull Requestする時は、fork元の履歴を保持したまま、自分のカスタマイズ履歴は除外したい。(Pull Request時には相手に知らせたいコミットだけが含まれるようにしたい)

やったこと

  1. upstreamを使って、fork元のリポジトリからコードをfetchする
    git fetch upstream
  2. originalというブランチを作成し、fetchしたupstreamのmainの状態を保存する
    git checkout -b original upstream/main

これで、originalブランチにはfetch元のオリジナルのコードが保存され、mainブランチではカスタマイズされたコードを続けて管理できました。あとは、Pull Requestしたい変更をoriginalのブランチでコミットし、そのブランチからfork元のレポジトリにPull Requestすれば、相手に知らせたい変更点のみが入ったPull Requestが完成しました。

git cherry-pick [ハッシュコード]も試してみたのですが、コミット履歴が残ってしまい、うまくいきませんでした。これはまた次回の勉強ということで。