LoginSignup
3
1

More than 5 years have passed since last update.

【GitHub】別のブランチで魔改造したファイルをmasterブランチに別名でマージする

Posted at

環境

  • GitHub
  • Git
  • VSCode

経緯(読む必要は特にない)

CソースをLINEで(平文で)貰ってデバッグをすることに

しかし環境は以下のとおりだった!

  • スマホ:LINEあり
  • デスクトップ:LINEあり、コンパイラなし、Gitあり
  • ノートPC:LINEなし、コンパイラあり、Gitなし(SourceTreeはある)

デバイス一つで解決しないという悲しみ…

解決方法

  1. デスクトップにコンパイラを入れる
  2. ノートPCにLINEを入れる
  3. ノートPCにソースを移動する

あたりを思いついた。それぞれ面倒さがあったが…せっかくだしGitHub使ってみるか!
ってことで3.を選択。

なんやかんやで解決

せっかくだしリファクタリングをすることに。
普通のバグを潰してGitHubに上げた後、ブランチを作成しリファクタリングを開始。

しかし、よく見ると色々問題が…

  • Gitの仕組みをよく分かっていなかったので、余計なフォルダまでGitHubに上がっていた
  • それに対応したのがブランチを作成した後だったので、各々削除する羽目に
  • ブランチで作成したファイルが原型を留めていなかったので、別ファイル名で保存したくなった

そんな中で格闘した結果を、使ったコマンドを含めてざっくりと残しておく。

今回の作業の流れ

  1. GitHubにリポジトリを作成
  2. GitHubにCソースをアップ(push)
  3. 別のPCでGitHubからソースを取得(clone)
  4. 修正をローカルのmasterブランチに反映(commit)
  5. ローカルのブランチをGitHubに反映(push)
  6. リファクタリング用のブランチを作成(branch)
  7. リファクタリング、ブランチに反映(commit)
  8. フォルダ構成の整理(省略)
  9. リファクタリングしたファイルのファイル名を変更(mv)
  10. 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についてかなり勉強になったと共に、今後も活用できそうだと自信が湧いてきた。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1