2018/05/06

git merge --squashによるコミットまとめ

先日、こういう記事を書いた。

クラウド上のVMとのファイル同期はどうやるのがよいのだろう?
http://hiro99ma.blogspot.com/2018/05/vm.html


あれこれ考えたが、私にとってはgitを使った方が無難だという判断に至った。
性格的に、突然大きな変更なんかをやらかしてしまいがち(そして動かなくなる)なので、こまめにgit commitしていく方が安心なのだ。


が、コミットログが乱れるのはよろしくない。
今までは気にもしなかったのだが、そういうお年頃になったのだと思おう。


お仕事用のプロジェクトで、ほぼ自分しかリポジトリを触っていなかったので、直接commit・直接pull request・直接merge、と、やっていたのだ(githubを使っている)。
それを、forkしてからpull requestするタイプにすればよさそうだった。

参考にしたのは、こちら。

慣れてきたらコミットをまとめてPull Requestしよう(git merge --squash) | 株式会社グランフェアズ
https://www.granfairs.com/blog/cto/git-merge-squash


たぶんだが、forkせずに同じリポジトリで作業していたら、それはそれでログが汚れてしまいそうな気がしたのだ。
だ、だよね??

まあ、そうじゃなくてもよいのだ。
プロジェクト用のリポジトリだから、自分は自分のリポジトリで作業して、結果だけを残せば良いのである。


やり方は、リンク先を見た方がわかりやすい。


で、その後だ。

実は・・・forkして作業するというのをほとんどやったことがない。
pull requestがマージされると、fork先が先に進んでしまうけど、どうしたらよいのだか。。。

GitHubでFork/cloneしたリポジトリを本家リポジトリに追従する - Qiita
https://qiita.com/xtetsuji/items/555a1ef19ed21ee42873

ありがたい。


手元にbranchが3つ(upstreamのもの、作業中だったもの、作業中をsquashしたもの)が残り、upstreamはそのままだし、squashしたものもmergeしたからよいのだが、作業中だったものは "git branch -d xxx"では消せず、 "git branch -D xxx"にしなくてはならなかった。
squashされたものの履歴までは追わないのだろう。


しかし、今回はsubmoduleも変わってしまったためか、mergeしてもcommitしていないものが残ってしまった。
commitしてpushしたのだが、当然オリジナルとは別のcommit idになる。


もしかして・・・forkしないでやるべきものなのだろうか?
いや、今まではそうせずにやっていて、commitログが乱れたものになってしまったのだから、それだと期待通りではない。


ずっとローカルで作業できるのであれば、forkせずにいけるような気がする。
だが、私はpushしてしまいたいのだ。
そうなると、第2のローカルという感じで、forkして自分のリポジトリで作業することになると思う。



今日はもうpull requestしたくなるようなものがないので、次回試すしかないな。


pull requestするものができたので、試した。

流れを復習しておこう。

  1. 本体からfork
  2. 本体側でsubmoduleの更新が発生
  3. fork側でpull requestし、本体側でmerge
  4. fork側を本体側に同期させようとして、upstreamをfetchして、メインブランチにmerge
    1. submoduleに差分が出たので、commit


この状態で、fork側からpull requestしたのだが、fork側のsubmode差分によるcommitも対象になってしまった。
おかげで、本体側のcommitログには、submoduleの更新が複数出てきてしまっている。
やはりか。。。


そんなに神経質になるつもりもないのだが、回避できるのであればやりたい。

簡単なのは、手順4をせずに、forkしたものを削除して、新たにforkする、だろう。
本体と同じものになるから、悩むこともない。


upstreamというブランチは、本体側と同じものだ。
それと同じように、手順4でmergeなどせず、mergeしようとしたブランチ自体を捨てて、fetchしたあとのupstreamからブランチを作ってしまえば良いのか?

何か違う、という感触はあるのだが、何がどうダメなのかはわからん。。。


だいたい、forkやらpull requestって、githubやbitbucketの機能で、git自体の機能じゃないよなぁ。
cloneして、remote set-urlで変更するとかか? いや、それじゃ足りないか。。。

使えば使うほど、gitへの理解が足りてないのが身にしみるわ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。