びぼーろくっ!

誰かに見せるわけでもないけど、備忘録として。。

はじめてつかったGitのリベースとスカッシュ

社内で新しいGitの運用方法が採用されたので
忘れないようにやり方をメモリます。

今回はGitExtensionを使ったやり方を記述しています。

リベースとスカッシュの手順

経緯:masterブランチやdevelopブランチからトピックブランチを作成して
developやmasterにコミットしていく方法で運用していたのですが
複数回コミットを行った際に履歴が訳分からなくなるというのが今回の発端でした。


まず、こんな感じのブランチがあって、ここでトピックブランチを作成します。

f:id:kinachan0725:20171114175318p:plain

適当に2回コミットしました。

f:id:kinachan0725:20171114175337p:plain

これらのCSSファイル、JSファイルの追加を1コミットにまとめたい。。
コマンドラインで下記のコマンドを実施します。

git rebase -i HEAD~x

※xはまとめるコミットの数だけ指定します。
今回は2コミット分をまとめるので、git rebase HEAD~2とします。

なんかファイルが出てきました。

f:id:kinachan0725:20171114175445p:plain

これを編集していきます。

内容を編集するためのテキストが開くので、まとめたいコミットがまとまるように書き換えます。
やり方の例としては最初のコミットをpickのままにして、
他のコミットをpick→squash(s)にすることでコミットが一つにまとまります。

そのため、編集箇所は2行目の「pick」を「s」に変更したらOKですね。
保存して閉じます。

閉じたらまたファイルが出てきました。

f:id:kinachan0725:20171114175457p:plain

これはコミットの際に表示するメッセージですね。
今回はCSS&JSファイルを追加と変更します。

f:id:kinachan0725:20171114175507p:plain

保存して閉じてF5を押すととメッセージが変更されて、コミット内容が1つになっているのが分かります。

これが「スカッシュ」の手順となります。



今度はリベースのテストです。
マスターブランチから新しくmenu.jsを追加したとします。
そのため、TOPIC_1のブランチはmenu.jsを取り込んでいない状態となります。
GitExtensionではこのような画面になります。

f:id:kinachan0725:20171114175514p:plain

これを最新のブランチが分岐元になるように最新を取得します。
TOPIC_1のブランチで下記のコマンドを実行します。

git rebase '元となるブランチ'

今回はマスターブランチの最新から分岐させたいので、git rebase masterと打ちます。

f:id:kinachan0725:20171114175542p:plain

うまくいったようです。
F5を押して更新を掛けてみます。

f:id:kinachan0725:20171114175553p:plain

成功ですね!やった!
最新のメニューが追加された状態でマージを下ということになりますね。
もし、この際に競合が発生していたら解決をするという流れです。

そしてTOPIC_1のブランチをpushすればremote側も反映されるという仕組みです。