はじめに
この記事は、Git( & Qiita)初心者が、自身のための勉強メモとして書いた記事です。
すでにGitの使い方をまとめた素晴らしい記事が複数あるので、Git初心者はそちらを参考にすることをオススメします。
Qiita記事: [初心者向け]GitとGitHubの使い方を徹底解説
Qiita記事: 君には1時間でGitについて知ってもらう(with VSCode)
Gitとは
Gitは、分散型のバージョン管理システムです。ファイルの変更履歴を保存し、その変更履歴を辿ることで、ファイルの状態を戻すことができます。「リポジトリ」と呼ばれるファイルやデータの格納庫を使います。
GitHubは、ソースコードを共有し、管理するためのプラットフォームです。
ファイル変更からプッシュまでの概要
Gitでは、自分のファイルの変更内容を、ローカルリポジトリに書き込んで、変更内容をリモートリポジトリに転送することで、バージョン管理をします。
エディタでファイルの変更内容を保存したら、それを「ステージングエリア」に追加します(=ステージング)。そして、コメント(=コミットメッセージ)を添えて、ローカルリポジトリに記録(=コミット)します。更にこれをリモートリポジトリに送信(=プッシュ)することで、リモートリポジトリに情報が保存されます。
実際にやってみる
実際に、手元にあるファイルをGitHub上へプッシュしてみましょう。
なお、gitのインストール、GitHubへの公開鍵認証、git config user.name
及びgit config user.email
などの初期設定の説明は省略します。
まず、コマンドプロンプトを開いて、バージョン管理したいプロジェクトファイルへcdコマンドで移動し、次のコマンドを打ちます。
git init
プロジェクトファイル直下に.gitファイルが作成されました。
.gitファイルの中身には、ファイルの変更履歴やブランチ(リポジトリの分岐した状態を指すもの)などを保管していくことで、バージョン管理を行っています。
次に、git addコマンドにて、ファイル(hello.c)をステージします。
git add hello.c
git add (ファイル名)とすることで、(ファイル名)をステージします。まとめてステージしたい場合は、
git add .
とします。
ステージングエリアに追加されたファイルを、ローカルリポジトリに追加します。
git commit
コミットしたら、
git status
として、前回のコミットから変更のあるパスを表示できます。
そして、
git commit -m 'コミットメッセージ
とすることで、コミットすることができます。開発では、コミットの内容がわかりやすいように、コミットメッセージを記します。
開発におけるコミットメッセージの書き方はこちらを参考にすると良いでしょう。
Zenn記事: Gitのコミットメッセージの書き方(2023年ver.)
最後に、
git push origin (リモートブランチ名)
とすることで、プッシュ完了です。上流ブランチを設定することで、`origin (リモートブランチ名)は、省略可能です。
その他まとめ
上記の流れで、ローカルファイルをGitHub上へ公開することが出来ましたが、実際の開発では、ブランチやマージといった概念が重要になります。また、GitHubには、Pull requestsやGitHub issuesといったものもあり、チームでの開発では大切な要素になります。
GitやGitHubについて網羅的に説明しようとするのは極めて難しいので、大雑把ではありますが、以下に自分の勉強メモを簡単にまとめました。
用語のまとめ
用語 | 意味 |
---|---|
リポジトリ | ファイルを管理しておく場所。ローカルリポジトリとリモートリポジトリの2種類がある |
ワークスペース | 作業しているフォルダ |
ステージ | 変更したファイルをステージングエリアに追加する |
コミット | 変更をリポジトリに記録する |
リセット | 変更をなかったことにする |
ブランチ | 異なるコミット履歴を持つ、コードの分岐した状態 |
マージ | ブランチを合流させる |
リベース | 現在のブランチのコミットを別のブランチの先端に再適用する |
パッチ | (Gitでは、)プログラムの変更部分のソース |
プッシュ | ローカルリポジトリからリモートリポジトリにデータを記録する |
プル | リモートリポジトリからローカルリポジトリにデータを記録する |
フェッチ | リモートリポジトリとローカルリポジトリの差分を検出する |
スタッシュ | ファイルの変更を一時的に退避する |
アメンド | 直前のコミットを修正して、新しいコミットを作成する |
チェリーピック | 特定のコミットを別のブランチに適用する |
タグ | リリースされたバージョンなどに名前をつける |
ファストフォワード | マージ元のブランチが、マージ先のブランチの履歴に完全に含まれているようなマージ |
コンフリクト | マージ操作中に発生する変更内容の衝突 |
.gitignore | Gitによる追跡を避けるファイルを指定するためのファイル |
.gitkeep | Gitリポジトリで、空のディレクトリを保持するためのファイル |
コマンドのまとめ
# Gitのバージョンを表示する
git --version
# Gitリポジトリの現在の状態を表示する
git status
# コミット履歴を表示する(--all、--graph、--sinceオプションなどがある)
git log
# タグの一覧を表示する
git tag
# ブランチの一覧を表示する
git branch
# リモートリポジトリの一覧を表示する
git remote
# スタッシュの一覧を表示する
git stash list
# すべての設定の確認
git config -l --show-origin
# リポジトリを作成する
git init
# hello.cをステージング
git add hello.c
# 変更したファイルをステージング
git add .
# コミットする
git commit -m 'コミットメッセージ'
# アメンドによるコミット
git commit --amend --no-edit
# プッシュする
git push origin (リモートブランチ名)
# アップストリームを設定する
git push --set-upstream origin (リモートブランチ名)
# アップストリーム設定後のプッシュ
git push
# フェッチする
git fetch
# 以前の状態を復元する
git checkout .
# 1つ手前のコミット(HEAD^)まで戻す(リセットモードには、Soft, Mixed, Hardがある)
git reset HEAD^ --hard
# コミットに「v1.0.0」という名前のタグを追加する。(コミットID)が未指定なら、最新のコミットに反映される
git tag v1.0.0 (コミットID)
# タグを削除
git tag -d v1.0.0
# ブランチ「develop」を作成
git branch develop
# 特定のコミットからブランチ「develop」を作成
git checkout (コミットID) -b develop
# ブランチ「develop」に切り替える
git checkout develop
# マージする(--no-editをつけることでコミットメッセージを自動的に作成)
git merge feature-branch --no-edit
# ブランチを削除する(削除するブンチ以外のブランチにチェックアウトした状態で↓)
git branch -d feature-branch
# ブランチ名を変更する(masterをmainにする)
git branch -m master main
# リモートリポジトリのアドレスを登録する
git remote add origin (アドレス)
# クローンする
git clone (アドレス) (フォルダ名)
# スタッシュする(-uオプションで、ステージングしていないファイルも対象とする)
git stash save '作業中断'
# スタッシュを適用する(※git stash listで識別番号を確認すること)
git stash apply stash@{0}
# スタッシュを削除する
git stash drop stash@{0}
# リベース
git rebase (ブランチ名)
# チェリーピック
git cherry-pick (コミットID)
# 差分の確認
git diff HEAD^ HEAD^^
# パッチファイルの作成
git diff HEAD^ HEAD^^ > ../patch.diff
# パッチの適用
patch < ../patch.diff
備考
- GitHubでは、SSHを使用することで、ユーザーがリモートリポジトリに安全にアクセスする
- Gitをチームで運用する際プロセスをワークフローという。[日本語訳]A successful Git branching model
- リモートブランチの名前変更や削除、デフォルトブランチの変更はGitHub上で行える
- リベースは、コミットログを整理したいときに使う
- アメンドができるのは、プッシュをしていないコミットのみ
- Issues...プロジェクト管理において、タスク、バグ、機能要求などを追跡するための機能
- Milestone...進捗状況を管理するための機能
- GitHub Pages...Publicに設定したリポジトリのウェブサイトを公開する
- GitHub Actions...CI/CDツール
- GitHub Desktop...GitHub公式によるGitのクライアントソフト