環境
- GitHub
- Git
- VSCode
経緯(読む必要は特にない)
CソースをLINEで(平文で)貰ってデバッグをすることに
しかし環境は以下のとおりだった!
- スマホ:LINEあり
- デスクトップ:LINEあり、コンパイラなし、Gitあり
- ノートPC:LINEなし、コンパイラあり、Gitなし(SourceTreeはある)
デバイス一つで解決しないという悲しみ…
解決方法
- デスクトップにコンパイラを入れる
- ノートPCにLINEを入れる
- ノートPCにソースを移動する
あたりを思いついた。それぞれ面倒さがあったが…せっかくだしGitHub使ってみるか!
ってことで3.を選択。
なんやかんやで解決
せっかくだしリファクタリングをすることに。
普通のバグを潰してGitHubに上げた後、ブランチを作成しリファクタリングを開始。
しかし、よく見ると色々問題が…
- Gitの仕組みをよく分かっていなかったので、余計なフォルダまでGitHubに上がっていた
- それに対応したのがブランチを作成した後だったので、各々削除する羽目に
- ブランチで作成したファイルが原型を留めていなかったので、別ファイル名で保存したくなった
そんな中で格闘した結果を、使ったコマンドを含めてざっくりと残しておく。
今回の作業の流れ
- GitHubにリポジトリを作成
- GitHubにCソースをアップ(push)
- 別のPCでGitHubからソースを取得(clone)
- 修正をローカルのmasterブランチに反映(commit)
- ローカルのブランチをGitHubに反映(push)
- リファクタリング用のブランチを作成(branch)
- リファクタリング、ブランチに反映(commit)
- フォルダ構成の整理(省略)
- リファクタリングしたファイルのファイル名を変更(mv)
- masterブランチにブランチのファイルをマージ(本題)
本題以外も大変勉強になったが、とりあえず今回は本題についてのみ書いておく。
元は同じファイルを、別名でマージする方法
上記作業の流れの、9.まで終わっていると仮定する。
状況は下記のとおりとする。
- masterブランチ(現在のブランチ)
- source.c
- refactoringブランチ
- source_refactoring.c
普通にmasterブランチにマージしようとした場合
merge refactoring
と入力しても、ファイルが大きく変わっている為、コンフリクトとして拒否されてしまう。
新しいファイルとしてコミットすればよい
まずは、refactoringブランチから該当のファイルを取得する
git checkout refactoring -- source_refactoring.c
このファイルを新規ファイルとしてadd→commitしてやればよい
git add source_refactoring.c
git commit -m "ファイル追加" -m "リファクタリングしたファイルを別名で追加"
あとは煮るなり焼くなりGitHubにpushするなり
git push origin master
問題点
- 新規ファイルとして追加する為、masterブランチにこれまでの履歴が残らない
- 今回はrefactoringブランチに履歴があるし、特にほしい履歴でもないのでどうでも良かった
- もし履歴を残すなら、リファクタリングをする段階でコピーしたファイルをmasterブランチにて作成→refactoringブランチにて編集→masterブランチにマージだろうか
振り返り
ついさっきまでローカルで履歴管理ができる程度だったのが、GitHubを活用することでデバイスを跨いで管理できるようになった。
Gitについてかなり勉強になったと共に、今後も活用できそうだと自信が湧いてきた。