こんにちは、ECF Tech
ブログ担当 Michiharu.Tです。
Gitシリーズの第9回をお送りしたいと思います。前回から内容が少しだけ応用的になってきたので、「Gitを使いこなそう!」にタイトルを変更してお送りしています。よろしくお願いします。
今回は「リベース編」です。多くのブランチに枝分かれしたコミット履歴をキレイにする手法です。
対象読者
- gitの基本的なコマンドを知っている方(
init
,add
,commit
,push
など) - gitをもう少しつっこんで学びたい方
本記事は、Gitシリーズ連載記事の1つとなっています。もし最初からご覧になりたい方は下のリンクをご活用ください。
ハンズオン
それではハンズオン(実際に動作させながら学ぶ)をしながら、どのような動きを見ていきましょう。
事前準備
それでは早速始めましょう。Windows10での動作環境を前提に進めていきます。
適当なフォルダを作成し、git init
コマンドを実行します。ここではC:\work01を作成し実行します。
C:\work01>git init Initialized empty Git repository in C:/work01/.git/ C:\work01>
同フォルダに新規ファイルを作成し、次のようにします。ファイル名はfile01.txtとします。
計算するプログラムA
保存したら、コミットしましょう。
C:\work01>git add . C:\work01>git commit -m "コミットA" [master (root-commit) 14c6700] コミットA 1 file changed, 1 insertion(+) create mode 100644 file01.txt
file01.txtをもう1度編集しましょう。次のようにします。
計算するプログラムA 計算するプログラムB
再びコミットします。
C:\work01>git add . C:\work01>git commit -m "コミットB" [master 534a906] コミットB 1 file changed, 2 insertions(+), 1 deletion(-) C:\work01>
ではここでブランチを作成しましょう。次のコマンドを実行します。
C:\work01>git checkout -b display Switched to a new branch 'display'
displayブランチが作成され、移動しました。
ここで新規ファイル(file02.txt)を作成します。内容は次のようにします。
表示する機能C
保存したらコミットしましょう。
C:\work01>git add . C:\work01>git commit -m "コミットC" [display 1df9541] コミットC 1 file changed, 1 insertion(+) create mode 100644 file02.txt
file02.txtをもう一度編集します。次の内容とします。
表示する機能C 表示する機能D
保存したら、コミットします。
C:\work01>git add . C:\work01>git commit -m "コミットD" [display ac5281d] コミットD 1 file changed, 2 insertions(+), 1 deletion(-)
では再度、masterブランチに戻ります。
C:\work01>git checkout master Switched to branch 'master'
file01.txtを編集します。
計算するプログラムA 計算するプログラムB 計算するプログラムE
保存したらコミットです。
C:\work01>git add . C:\work01>git commit -m "コミットE" [master 9819cd9] コミットE 1 file changed, 2 insertions(+), 1 deletion(-)
長くなりましたがこれで準備は完了です。ここまでのコミット履歴を見てみましょう。
Git GUIで確認する
Git GUIを使って、ここまでの履歴を見てみたいと思います。Git GUIは、Gitのインストール時に同梱されるツールです。Gitのインストールについては、下をご参考ください。
Git GUIはWindows10の場合、左下の検索から「Git」と入力してみましょう。下のアイコンのアプリを起動します。
Open Existing Repositoryを選択します。
Browseでgit管理しているフォルダを選択します。指定したらOpenをクリック
メニュー -> Repository -> Visualize All Branch Historyを選びます。
ここまでの履歴を確認することができます。上の方が新しい履歴です。
masterとdisplayのブランチが枝分かれしていることが確認できます。
ここで作成したフォルダをコピーしておきましょう。gitの管理ファイルはWindowsでは次のような隠しフォルダとして存在しています。
したがって、フォルダごとコピーすることでもう一つgitの作業フォルダができることになります。コピーしたフォルダはwork02としておきます。
Git GUIで確認する
では、work01に戻っていよいよ本題です。一度displayブランチへ移動します。次のコマンドです。
C:\work01>git checkout display Switched to branch 'display'
次に下のコマンドを実行します。
C:\work01>git rebase master First, rewinding head to replay your work on top of it... Applying: コミットC Applying: コミットD
実行後、再びGit GUIでリポジトリの様子を確認しましょう。
元々枝分かれなどなかったかのように履歴が1本になっています。これがリベースの効用です。リベースはマージを行ない、さらに履歴を一本化する効果があります。ローカルリポジトリでの作業履歴をスッキリと見せることができます。
上の図を見るとmasterはまだ以前のコミットを指していますが、masterブランチを最新(displayと同じところ)に持ってくるには、fast-forwardマージを行ないます。
fast-forwardマージはポインタを先に進めるだけのマージです。
まずはmasterブランチへ移動し、
C:\work01>git checkout master Switched to branch 'master'
次のコマンドで行います。
C:\work01>git merge display Updating 9819cd9..2e79479 Fast-forward file02.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 file2.txt
masterブランチが先へ進みました。これでどちらも最新の状態になりました。
git mergeコマンドとの比較
一方で普通にマージした場合のコミット履歴も見てみることにしましょう。rebase前にコピーをとったもう1つのwork02フォルダで、mergeコマンドを実行します。
C:\work02>git merge display Merge made by the 'recursive' strategy. file02.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 file02.txt
マージが完了しました。こちらもGit GUIで履歴を見てみましょう。
こちらの場合は、ブランチが履歴としてそのまま残ったイメージで表示されていることがわかります。
リベースを使う注意点
ここまでリベースの機能について見てきましたが、最後にリベースの注意点について述べておきます。ここは公式ドキュメントで表現される一言を引用いたします。
公開リポジトリにプッシュしたコミットをリベースしてはいけない
これがリベースの鉄則との事です。実際にどのようなことが起こるかについては長いトピックになりますので将来の記事に譲りたいと思いますが、リベースの注意点としてこの1点は確認しておきましょう。
おわりに
本日はここまでとさせていただきます。最後までご覧くださりありがとうございました。知れば知るほど奥が深いGitの世界ですが、実験する環境を整えるのはいたって簡単です。ぜひ、手を動かしながら学んでいきましょう。
合同会社イー・シー・エフでは、子ども向けプログラミングなどの教育講座を実施しています。プログラミング教室の案内や教育教材の情報、また関連するご相談・問い合わせにつきましては下記よりご確認ください。