—— Gitの使い方メモ ——
既存のフォルダをGitリポジトリにする手順
1. フォルダの場所に移動する
コマンドラインツール(ターミナル、Git Bash、コマンドプロンプトなど)を開き、Git管理したい既存のプロジェクトフォルダのルートディレクトリに移動します。
cd パス/to/your/project-folder
2. Gitリポジトリを初期化する
移動したディレクトリで、次のコマンドを実行します。これにより、プロジェクトフォルダ内に非表示の .git というサブディレクトリが作成され、そのフォルダがGitリポジトリとして機能するようになります。
git init
3. ファイルをステージングエリアに追加する
プロジェクト内のすべてのファイル(または管理したいファイル)をステージングエリアに追加します。これにより、次のコミットの対象となります。
git add .
(注: . は現在のディレクトリ内のすべてのファイルとサブフォルダを意味します)。
後からGit管理したくないファイル(ログファイルやコンパイル済みファイルなど)がある場合は、この時点で .gitignore ファイル(後述)を作成し、除外パターンを定義することをお勧めします。
4. コミットする
ステージングエリアに追加したファイルをローカルリポジトリにコミット(保存)します。コミットメッセージは、最初のコミットであることがわかるような簡潔なものにします。
git commit -m "Initial commit"
ここまでで、既存のフォルダはローカルのGitリポジトリとして管理されるようになりました。
(オプション)リモートリポジトリ(GitHubなど)と連携する
5. GitHubなどで新しいリポジトリを作成する
GitHubのウェブサイトなどで、新しい空のリポジトリを作成します。このとき、READMEや.gitignoreファイルなどを初期化 しない ように注意してください。作成後に表示されるリモートリポジトリのURL(例: https://github.com/ysername/xyzxyz )をコピーします。
6. リモートリポジトリを登録する
ローカルリポジトリにリモートリポジトリのURLを登録します。 origin はリモートリポジトリの一般的な名前です。
git remote add origin <リモートリポジトリのURL>
正しく追加されたかを確認するには、 git remote -v コマンドを使用します。
間違ったURLを追加してしまった場合は、 set-url を使って修正します。
git remote set-url origin <正しいURL>
7. リモートリポジトリにプッシュする
ローカルのコミットをリモートリポジトリにプッシュします。
git push -u origin main
(注: デフォルトブランチ名が 'master' の場合は 'master' に置き換えてください)。
これで、既存のフォルダの内容がGitHubのリモートリポジトリにアップロードされ、連携が完了しました。
.gitignore の基本フォーマットとルール
1. 行コメント
# で始まる行はコメントとして扱われ、無視されます。
# これはコメント行です
2. 空行
空行は無視され、可読性を高めるために使われます。
# コンパイル済みのコード
/build/
# その他
3. ファイル名の指定
特定のファイル名を指定すると、その名前のファイルがどのディレクトリにあっても無視されます。特定のディレクトリ内のファイルのみを無視したい場合は、パスを指定します。
# どこにあっても app.log という名前のファイルを無視する
app.log
# ルートディレクトリ直下ののみ app.log を無視する
/app.log
# src/logs/app.log のみを無視する
src/logs/app.log
4. ディレクトリの指定
ディレクトリ名の最後に / を付けると、そのディレクトリ全体と、その中身すべてが無視されます。スラッシュを付けなくてもディレクトリは無視されますが、明示的に指定する方が一般的です。
# build ディレクトリ全体を無視する
build/
# vendor ディレクトリ全体を無視する
vendor/
5. ワイルドカード *
* (アスタリスク) は、ゼロ文字以上の任意の文字列にマッチします。
# 拡張子が .log のすべてのファイルを無視する
*.log
# log_ から始まるすべてのファイルを無視する
log_*.txt
# hoge/foo/bar など、複数階層にまたがるディレクトリ内のすべての .log ファイル
**/*.log
6. 除外パターンの否定 !
一度無視するように指定したファイルやディレクトリの中で、 例外的に追跡したい ファイルがある場合、行頭に ! を付けて指定することで、無視リストから除外できます。
# すべてのログファイルを無視する
*.log
# ただし、例外として debug.log だけは追跡する
!debug.log
よくある .gitignore の例
一般的に、言語やフレームワーク固有の一時ファイルやキャッシュ、環境設定ファイルなどを無視リストに入れます。
# OSやエディタのシステムファイル
.DS_Store # macOS
Thumbs.db # Windows
.vscode/ # VS Code の設定フォルダ
# Node.js 依存関係
node_modules/
npm-debug.log*
# Python 依存関係
__pycache__/
*.pyc
.venv/
# ビルド成果物
/build/
/dist/
# 環境変数ファイル
.env
.gitignore ファイルのテンプレートは、GitHubの公式リポジトリで多数公開されていますので、参考にすると便利です。 ( https://github.com/github/gitignore )
Authorを変更する
Gitでコミットする際の Author (コミット者) 情報は、いくつかの方法で変更・指定できます。プロジェクト全体の設定を変更する方法と、特定のコミットのみ一時的に変更する方法があります。
1. プロジェクトまたはグローバルの設定を変更する
通常、Gitは設定ファイルからユーザー名とメールアドレスを取得します。これを変更するのが最も標準的な方法です。
A. 現在のプロジェクトのみ設定を変更する
特定のプロジェクトフォルダ内でのみ、異なるコミット者名を使いたい場合に適しています。
# ユーザー名を変更
git config user.name "新しいユーザー名"
# メールアドレスを変更
git config user.email "新しいメールアドレス"
この設定は、そのリポジトリ内でのみ有効です。
B. すべてのGitプロジェクトで設定を変更する(グローバル設定)
今後行うすべてのコミットでこの情報を使いたい場合は、--global オプションを付けます。
# グローバルユーザー名を変更
git config --global user.name "新しいユーザー名"
# グローバルメールアドレスを変更
git config --global user.email "新しいメールアドレス"
2. 特定のコミット時に一時的にAuthorを指定する
コミットメッセージを作成する際に、--author オプションを使用すると、その1回限りのコミットのAuthor情報を上書きできます。
すでにグローバル設定やプロジェクト設定が完了している場合は通常このオプションは使いませんが、一時的に別のアカウント名義でコミットしたい場合に使えます。
git commit --author="希望のユーザー名 <メールアドレス>" -m "コミットメッセージ"
3. すでにコミット済みのAuthor情報を変更する
注意: すでにプッシュ(リモートリポジトリに送信)してしまったコミットの履歴を変更すると、他の共同作業者のリポジトリと整合性が取れなくなる可能性があるため、非推奨です。
しかし、まだローカル環境にしか存在しない最後のコミットのAuthor情報を修正することは可能です。
◎ 直前のコミットのAuthorを変更する
--amend オプションと --author オプションを組み合わせて使用します。
# Author情報を指定して直前のコミットを修正(メッセージも変更する場合は -m を追加)
git commit --amend --author="新しいユーザー名 <新しいメールアドレス>" --no-edit
(注: --no-edit はコミットメッセージを変更しないためのオプションです。)
◎ 複数の過去のコミットや、広範囲に Author を変更する
警告:
- 履歴が書き換わります。 変更後のコミットハッシュはすべて変わります。
- 共同作業に影響します。 すでにリモートリポジトリにプッシュされている場合、他の開発者はあなたの変更を強制的に受け入れる必要があり、コンフリクト(競合)を引き起こす可能性があります。
- 必ず作業前にリポジトリのバックアップを取ってください。
推奨される方法: git filter-repo の使用
以前は git filter-branch が使われていましたが、現在では非推奨(deprecated)となっており、より高速で安全な後継ツールである git filter-repo の使用が推奨されています。
前提条件: git filter-repo のインストール
まず、システムに git filter-repo をインストールする必要があります(Pythonが必要です)。
# macOS の場合 (Homebrew を使用)
brew install git-filter-repo
# Linux の場合 (apt を使用)
sudo apt-get install git-filter-repo
# Python の pip を使用する場合
pip install git-filter-repo
手順: Author 情報を書き換える
ここでは例として、「間違ったメールアドレス old-email@example.com でコミットされたすべてのコミットを、正しい名前 Correct Name とメールアドレス correct-email@example.com に書き換える」手順を説明します。
-
リポジトリのバックアップを取る
現在のリポジトリフォルダをコピーして、万が一の事態に備えてください。 -
作業ディレクトリに移動する
Author を変更したい Git リポジトリのルートディレクトリに移動します。
.cd your-repository-name -
Author 情報を書き換えるコマンドを実行する
git filter-repoに--env-filterオプションを使い、環境変数を変更するスクリプトを渡します。git filter-repo --env-filter ' OLD_EMAIL="old-email@example.com" CORRECT_NAME="Correct Name" CORRECT_EMAIL="correct-email@example.com" if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ] then export GIT_COMMITTER_NAME="$CORRECT_NAME" export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL" fi if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ] then export GIT_AUTHOR_NAME="$CORRECT_NAME" export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL" fi ' --force- このスクリプトは、コミットの作成者 (AUTHOR) またはコミッター (COMMITTER) のメールアドレスが
OLD_EMAILと一致した場合、名前とメールアドレスをCORRECT_NAMEおよびCORRECT_EMAILに書き換えます。 -
--forceオプションは、ローカルリポジトリ内のバックアップファイルなどを上書きするために必要です。
- このスクリプトは、コミットの作成者 (AUTHOR) またはコミッター (COMMITTER) のメールアドレスが
-
リモートリポジトリに強制プッシュする(危険なステップ)
ローカルの履歴は書き換わりましたが、リモートリポジトリはまだ古い履歴のままです。この変更を反映させるには、強制プッシュが必要です。git push origin main --force # または、デフォルトブランチが master の場合 git push origin master --force
補足: git filter-repo を使った全コミットの Author/Committer 設定
特定のメールアドレスに関係なく、すべてのコミットのAuthorとCommitterを特定の値に統一したい場合は、よりシンプルなコマンドがあります。
git filter-repo --name-callback 'return b"Your New Name"' --email-callback 'return b"your-new-email@example.com"' --force
まとめ
広範囲の Author 変更は、履歴を根本的に操作する高度な操作です。git filter-repo ツールを使用し、共同作業者が少ない場合や、個人プロジェクトでのみ実施するようにしてください。
タグをつける
Gitでタグを付ける方法は、主に 「軽量(lightweight)タグ」 と 「注釈付き(annotated)タグ」 の2種類があります。
リリース管理など、重要な記録として残す場合は、作成者や日付の情報が含まれる 注釈付きタグ の使用が推奨されます。
1. タグを作成する
A. 注釈付きタグ(推奨)
バージョン番号やコメントを含めることができ、Gitオブジェクトとして詳細情報が保存されます。
git tag -a v1.0 -m "バージョン 1.0 リリース"
-
-a: タグ名を指定(例:v1.0) - '-m' : メッセージを入力
B. 軽量タグ
特定のコミットへのポインタに過ぎず、一時的な目印として使われます。
git tag v1.0-beta
2. タグを確認する
作成されたタグの一覧を表示します。
git tag
特定のパターン(例: v1から始まるもの)を確認する場合:
git tag -l "v1.*"
3. リモートリポジトリにタグを送信(プッシュ)する
git push だけでは、作成したタグはリモート(GitHubなど)に送信されません。個別にプッシュする必要があります。
特定のタグのみ送信する場合
git push origin v1.0
ローカルにあるすべてのタグをまとめて送信する場合
git push origin --tags
4. 過去の特定のコミットにタグを付ける
最新(HEAD)ではなく、過去のコミットにタグを付けたい場合は、コミットのハッシュ値を最後に指定します。
# 1. ログを確認してハッシュ値(例: a1b2c3d)を特定
git log --oneline
# 2. そのコミットに対してタグを付ける
git tag -a v0.9 a1b2c3d -m "旧バージョンのアーカイブ"
5. タグを削除する
ローカルのタグを削除
git tag -d v1.0
リモートのタグを削除(既に送信済みの場合)
git push origin --delete v1.0