人に見せたくない一時的な変更の含まれたコミットを消してRemoteにpush

備忘録。

何がしたかったか

  • 他人のgithubのprojectをgitlabにクローンしてきて社内公開を前提に開発を進めていた。
  • 後日、githubにも公開したくなった。
  • gitlab公開前提に作っていたので社外の人には見せたくない変更をしていたコミットが多々あった
  • それらの変更を打ち消すようなコミットを作っても、このままpushすると過去の見せたくない変更が含まれたコミットも結局一緒に公開されてしまう。それは避けたい。(途中の変更はなかったことにしたい。)
  • また、localには社外公開したくないコミットも残しておきたかった。
  • さらに、クローン元のprojectがgithubにクローンしたときにはgitlabにクローンしてきた時より開発が進んでいて、githubにクローンしてきたものにはどっちみちそのまますんなりlocalの変更をpushできないことが判明した。

解決法

ざっくりな流れ

localのmasterの先頭に新しいブランチ作成
→新しいブランチでは、squashで見せたくないコミットは全部まとめてしまう
→新しいブランチをremote(github)のmaster(元projectのクローンしただけ)にリベース(&コンフリクトの解決)&push

詳しく

画像1.png

  1. 元の状態。過去に行った社外の人に見せたくない変更を含んだコミットが過去にたくさん。社外の人に見せられるのは最新状態のみ。加えて、remote(github)のmaster(元projectのクローンしただけの状態)とlocalのmasterがそもそもこのままpushしたら競合するようになってしまっている。
    画像2.png

  2. localのmasterの戦闘に新しいブランチ作成
    画像3.png

  3. 新しいブランチでは、squashで見せたくないコミットは全部まとめてしまって、なかったことにする。
    画像4.png

  4. 新しいブランチをremote(github)のmasterにリベース。競合が発生するのでその解決をして、push。

  • こうすることによって
    • 社外の人に見せたくない過去の変更は一切外に出ない(なかったことになる)
    • localには社外に見せたくない変更を含めて過去のすべての変更を残しておくことができる

を両方実現できた。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.