Gitの使い方

2023年10月19日Raspberry Pi Pico入門,その他

概要

Gitは専門用語が多いので可能な限りシンプルに整理してみました。あの用語、どういう意味だっけ?となったら使ってみてください。

Gitは元々CUIで使う前提のシステムなので操作は全てコマンドで行います。実際は管理ソフト「Sourcetree」を使うのでコマンドの入力やデータの可視化はソフト側でいい感じにやってくれます。

Gitとは

Gitとはバージョン管理システムと呼ばれるもので、変更履歴を蓄積し、ファイルや変更履歴を他の人と共有するためのシステムです。
一つのプログラムを複数人で開発する時には必須の機能です。
詳しい概念は丁寧に説明されているサイトがあるので参考リンクを貼っておきます。

・Gitの概念を理解する
コマンドの打ち方はツールがいい感じにやってくれるので覚える必要はありません。「コマンドを実行すると何が起こるのか」のイメージをつかむことに注力してください。

・GitをGUIで管理するソフト「Sourcetree」の使い方
本来のGitは文字情報のみで扱いづらいのですが、このソフトを使うと変更履歴を可視化したり、画面に従ってボタンをポチポチ押すといい感じにコマンドを打ってくれたりするのでGitがかなり使いやすくなります。

Gitの練習方法

とにもかくにも使ってみるのが一番の近道です。最初は「test.txt」のようにテキストファイルを作成して、「テスト1」「テスト2」のように適当な文章を打ってコミットし、ブランチを切ったりリセットで元に戻したりマージでブランチを統合したりしながら感覚をつかんでください。

Gitの用語(基本編)

Gitがどんな感じで動いているかのイメージを図で表してみました。
実際には作業フォルダの中の「.git」という名前のフォルダにローカルリポジトリとステージが保存されています。

Gitのイメージ
変更履歴の中身

repository:リポジトリ

変更履歴を保存する場所を指します。ファイルの追加・削除も記録しているので、結果的に履歴だけでなくファイルの本体も保存されています。

stage:ステージ(index:インデックス)

変更点一覧を置いておく場所です。どの変更を履歴に保存するのか整理するのに使います。
※サイトによってステージと書いてあったりインデックスと書いてあったりします。どちらが正しいんだろう。。。

add:アッド

Gitのコマンドの一つで、変更点をインデックスに登録します。登録はファイル1個単位で行います。
アッドでインデックスに変更点を登録することを「ステージする」といいます。

commit:コミット

Gitのコマンドの一つで、アッドでステージした変更点一覧をローカルリポジトリに保存します。また、コミットした変更履歴のこともコミットと呼びます。なるべくこまめにコミットすると後々便利です。

push:プッシュ

Gitのコマンドの一つで、変更履歴をリモートリポジトリに保存します。

fetch:フェッチ

Gitのコマンドの一つで、リモートリポジトリから変更履歴をダウンロードしてローカルリポジトリを最新の状態にします。
Sourcetree的に言うならHistoryを最新の状態に更新するコマンドです。

branch:ブランチ

複数人で開発するときには、バージョンを枝分かれさせて各々が開発することになります。この枝分かれをブランチと呼びます。
個人開発の時でも、「〇〇搭載版」「〇〇削除版」という感じで分けたいときに便利です。

checkout:チェックアウト

Gitのコマンドの一つで、リモートリポジトリからフェッチしたブランチに切り替えます。チェックアウトをシンプルにして使いやすくしたコマンドが動画で解説されている「switch:スイッチ」なのですが、Sourcetreeは対応していません。
ただ、SourcetreeにはGUIのブランチ切り替え機能があるので困ることはないと思います。

merge:マージ

Gitのコマンドの一つで、二つのブランチを統合したものを作業フォルダに保存します。要するに下図の赤矢印の操作を指します。コンフリクト(競合:同じ個所を変更している状況)が発生したら両方のコードを残す形で統合されるので、どちらを残すかの修正が必要です。
※マージした部分はローカルリポジトリにも保存されないので、マージ結果を確認した上でコミットが必要です。

reset:リセット

Gitのコマンドの一つで、作業フォルダを以前のコミットに戻します。(前のバージョンに戻す操作)
リセットするとリモートリポジトリにプッシュしたコミットは残りますが、プッシュしていないコミットは削除されます。

Mainブランチ(Masterブランチ)

動作確認済みで内容に問題のないコミットだけをマージした、いわゆる安定板です。Masterブランチにmergeした時は、チームメンバーに連絡して安定板を更新したことを伝えるのが一般的です。
プログラムの世界では、Masterという言葉はSlave(奴隷)という言葉とセットで使うことが多くてイメージが悪いので、最近はMainブランチと呼ぶそうです。(この記事を書いた時点では、ネットの情報はMasterブランチと書いている方が多いです)

pull:プル

Gitのコマンドの一つで、実行するとまずフェッチをして、指定したブランチの最新バージョンをマージするところまで一気に行います。

pull request:プルリクエスト

Githubの機能で、チームメンバーに「私のブランチをこんな感じで更新したので、みんなで確認して問題なければMainブランチにマージしたいです」と連絡する機能です。
※大規模開発に携わったことが無いので使ったことはありません。。。

Gitの用語(応用編)

.gitignore(ギットイグノアー)

作業フォルダの一番上に「.gitignore」というファイルを置いておくと、「これは個人的なファイルなのでGitの監視対象から外してください」という設定ができます。コンパイルした実行ファイルやメモ書きなどを指定しておくと便利です。フォルダ単位でまとめて指定することも可能です。

Squash(スカッシュ)

Gitのコマンドの一つで、隣り合ったコミットを一つにまとめることが出来ます。例えばAという機能を何日か掛けて実装する時、毎日コミットしていると作業中のコミットが増えてしまいます。これらをSquashで一つにまとめ、「Aの実装」というコミットを作ることが出来るので、プッシュしたときにリモートリポジトリを汚すことなく自分のタイミングでコミットすることが出来ます。
ただ、一度スカッシュすると元の別々のコミットには戻せないので注意してください。

Sourcetreeでの操作方法は下記リンク先で解説されています。