GitGit [ギット]ソースコードの変更履歴を管理する分散型バージョン管理システムを使い始めたものの、「コミットしようとしたらエラーが出た」「プロジェクトごとに異なるメールアドレスを使い分けたいけれど設定方法がわからない」といったお悩みを抱えていませんか?
複数人で開発を行う際や、個人のマシンで業務用のリポジトリとプライベートのリポジトリを並行して扱う場合、git configによる適切な設定管理は避けて通れない重要な要素です。
この記事を読むと、以下のメリットが得られます。
git configの設定を変更する「4つの方法(コマンド2種・設定ファイル直接編集2種)」が整理でき、状況に応じて使い分けられるようになる。git configの適用範囲(スコープ)の優先順位が明確になり、環境に合わせた適切な設定ができるようになる。- 設定変更が過去のコミットに及ぼす影響や、誤コミット防止テクニック、よくあるエラーの対処法を正しく理解できるようになる。
確認した環境
本記事のコマンドおよび手順は、以下の環境で動作を確認しています。
- OSOS [オーエス]Operating System。基本ソフトウェア: UbuntuUbuntu [ウブントゥ]人気のLinuxディストリビューション 24.04 LTS / macOSmacOS [マックオーエス]Appleが開発するMac用のオペレーティングシステム Sonoma / Windows 11 (PowerShell)
- Git バージョン: 2.43.0 / 2.55.0(Windows)
※OSごとの設定ファイルの保存場所やエディタの起動方法は、インストール設定や環境変数によって異なる場合があります。
git configの設定確認・変更の基本概念
Gitの動作環境やユーザー情報は、git configコマンドを使用して管理します。このコマンドを正しく活用するためには、設定が適用される「スコープ(範囲)」の概念を理解することが重要です。
configの適用スコープ(system, global, local)とは
git configには、主に3つの適用スコープが存在します。設定を変更・確認する際は、どのスコープに対して操作を行うかを意識することが重要です。
-
system スコープ (
--system)- 対象ファイル:
/etc/gitconfig(Windowsの場合はC:\Program Files\Git\etc\gitconfigまたは%ProgramData%\Git\configなど) - 適用範囲: マシン上のすべてのユーザー、すべてのリポジトリに適用されます。通常、システム管理者が全社共通の設定を強制する場合などに用います。
- 対象ファイル:
-
global スコープ (
--global)- 対象ファイル: ユーザーのホームディレクトリ配下の設定ファイル(通常は
~/.gitconfig、Windowsの場合はC:\Users\<ユーザー名>\.gitconfig。環境によってはXDG準拠のC:\Users\<ユーザー名>\.config\git\configも参照されます) - 適用範囲: 現在ログインしているユーザーのすべてのリポジトリにデフォルトで適用されます。個人開発や普段使いのユーザー名・メールアドレスを設定する際に最もよく利用されるスコープです。
- 対象ファイル: ユーザーのホームディレクトリ配下の設定ファイル(通常は
-
local スコープ (
--local)- 対象ファイル: 各リポジトリ内の
.git/config - 適用範囲: 設定を行った特定のGitリポジトリ内のみに適用されます。グローバル設定よりも優先されるため、社用とプライベートでメールアドレスを使い分けたい場合に重宝します。
- 対象ファイル: 各リポジトリ内の
オプションを省略した場合のデフォルトの挙動は、**書き込み時は原則として --local(リポジトリ内から実行した場合)**として扱われます。ただし、リポジトリ外で実行するとエラーになるほか、意図しないスコープへの書き込みを防ぐためにも、設定時は明示的に --global や --local オプションを指定する運用が推奨されます。
なお、Gitにはこれら3つのほかにも、複数ブランチを並行作業する際に利用される worktree スコープ(--worktree)や、コマンド実行時限定で設定を渡す git -c <キー>=<値> などの指定方法も用意されています。
現在の設定値を確認するコマンド(—show-origin と —show-scope)
現在の設定値の一覧を確認するには、git config --list コマンドを使用します。また、どの設定ファイルからどのスコープとして読み込まれているかを併せて確認したい場合は、--show-origin や --show-scope オプションを付与します。
# 設定一覧を設定ファイルパス・スコープ付きで確認git config --list --show-origin --show-scope実行時の出力例(LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネル環境の場合):
system file:/etc/gitconfig core.symlinks=truesystem file:/etc/gitconfig core.autocrlf=inputglobal file:/home/username/.gitconfig user.name=Taro Yamadaglobal file:/home/username/.gitconfig user.email=taro@example.comlocal file:.git/config core.repositoryformatversion=0local file:.git/config remote.origin.url=https://github.com/example/repo.git特定の項目だけを設定元やスコープ付きでピンポイントに確認したい場合は、次のように実行します。
git config --show-origin --show-scope --get user.email同じキーが複数の設定ファイルに記述されている場合でも、どのスコープの値が適用されているのかを正確に切り分けることができます。
git configでユーザー名やメールアドレスを変更する4つの方法
Gitの設定(ユーザー名やメールアドレスなど)を変更するには、大きく分けて コマンドラインから変更する方法(方法1・方法2) と、 設定ファイルを直接編集する方法(方法3・方法4) の4通りがあります。
方法1: コマンドでグローバル設定を変更する(—global)
PC全体で共通して使用するユーザー名やメールアドレスを設定するには、--globalオプションを使用します。
ステップ1: ユーザー名を設定する
git config --global user.name "Taro Yamada"ステップ2: メールアドレスを設定する
git config --global user.email "taro@example.com"ステップ3: 設定内容を確認する 設定が正しく保存されたことを確認するため、キーを指定して値を取得します。
git config --global user.namegit config --global user.email※ --get を付与して git config --global --get user.name と実行しても同様に確認できます。
方法2: コマンドでリポジトリごとの個別設定を変更する(—local)
特定のプロジェクト(例: 業務用のリポジトリ)だけ別のメールアドレスを使用したい場合は、対象のリポジトリディレクトリに移動した上で、--localオプションを使用して設定を上書きします。
ステップ1: 対象のリポジトリへ移動する
cd /path/to/work-repositoryステップ2: ローカルのユーザー名を設定する
git config --local user.name "Taro Yamada (Work)"ステップ3: ローカルのメールアドレスを設定する
git config --local user.email "taro.yamada@company.com"ステップ4: ローカル設定を確認する
git config --local --listこのローカル設定は、グローバル設定よりも優先して適用されるため、このリポジトリから行うコミットには会社用のメールアドレスが記録されるようになります。
方法3: グローバル設定ファイル(.gitconfig)を直接編集する
コマンドラインからの個別設定だけでなく、設定ファイルを直接エディタで開いて編集することも可能です。複数の設定を一度に記述したい場合や、全体の設定を俯瞰して整理したい場合に便利です。
グローバル設定ファイルは、通常ユーザーのホームディレクトリに保存されます。
- Linux / macOS: 通常は
~/.gitconfig。$XDG_CONFIG_HOMEが設定されている場合は$XDG_CONFIG_HOME/git/configも使用されます(一般的な既定値では~/.config/git/config)。両方の設定ファイルが存在する場合は両方が読み込まれます。 - Windows: 通常は
C:\Users\<ユーザー名>\.gitconfig。環境や設定によってはXDG Base Directory仕様に準拠したC:\Users\<ユーザー名>\.config\git\config(%USERPROFILE%\.config\git\config)が参照される場合もあります。
ターミナルから設定ファイルを直接エディタで開くには、以下のコマンドを実行します。
git config --global --edit[!NOTE] 起動するエディターと注意点
--editを実行すると、Gitに登録されている既定のエディター(VS Code、Nano、Vimなど)が自動的に起動します。 もしターミナル内でVimなどのCUIエディターが起動して操作に戸惑った場合は、キーボードで:wqと入力して Enter を押せば保存終了(変更を保存せず閉じる場合は:q!)できます。 使い慣れたエディター(例: VS Code)で開きたい場合は、事前に次のコマンドで設定しておくと安心です。Terminal window git config --global core.editor "code --wait"
設定ファイルの記述例:
[user] name = Taro Yamada email = taro@example.com[core] editor = code --wait autocrlf = input[init] defaultBranch = mainこのように、INIファイル形式でシンプルに記述されているため、テキストエディタで直接書き換えて保存することが可能です。
方法4: ローカル設定ファイル(.git/config)を直接編集する
リポジトリ個別の設定ファイルは、各リポジトリ直下の隠しディレクトリ .git 内に格納されています。
- パス:
<リポジトリルート>/.git/config
こちらも、対象のリポジトリディレクトリに移動した状態で以下のコマンドを実行することで、直接エディタで開いて編集できます。
git config --local --edit直接編集する際は、セクション名([user] や [core] など)の構文ミスやインデントの崩れに注意してください。
よくあるエラーとトラブルシューティング
Gitの運用時につまずきやすい代表的なエラーや疑問について、原因と対処法を解説します。
Author identity unknownエラーの再発防止策
新しいリポジトリで初めてコミットを行おうとした際、以下のようなエラーメッセージに遭遇することがあります。
エラーメッセージ例:
Author identity unknown
*** Please tell me who you are.
Run
git config --global user.email "you@example.com" git config --global user.name "Your Name"
to set your account's default identity.Omit --global to set the identity only in this repository.
fatal: empty ident name (for <>) not allowed原因:
コミット作成時に作者・コミッター情報を決定できない場合、コミット時に Author identity unknown などのエラーが発生します。
Gitは条件によって環境変数(EMAIL など)やシステム情報(ログインユーザー名やホスト名)から値を推測して補う場合もありますが、予期せぬ名前やメールアドレスが履歴に記録されるリスクを防ぎ、確実に設定を管理するためにも、user.name と user.email を明示的に設定することを推奨します。
注目すべきは、メッセージ内の Omit --global to set the identity only in this repository. という案内です。Git自身が「このリポジトリ限定にしたい場合は --global を省略して設定(=--local)してください」と教えてくれています。
対処法・再発防止策: PC全体で標準として使う名前とアドレスを登録するには、メッセージの通りグローバル設定を行います。
git config --global user.name "Taro Yamada"git config --global user.email "taro@example.com"設定が反映されないときの原因と優先順位の確認
「設定を変更したはずなのに、コミットの作者情報や挙動が変わらない」という場合は、設定の適用順位(優先順位)が原因であることがほとんどです。
基本的な設定ファイルの優先順位は以下の通りで、同じ設定キーに複数の値が存在する場合、後から読み込まれた(より局所的な)設定が前の設定を上書きします。
- System (
--system): 全ユーザー共通 - Global (
--global): ログインユーザー共通 - Local (
--local): リポジトリ個別(最優先)
Gitの公式仕様では、上記に加えて複数作業ツリー用の worktree スコープや、実行時一時指定の command スコープ(git -c <キー>=<値>)なども定義されています。これらを含めた実際の適用結果は、指定方法や対象項目によって決まります。
※ただし、複数値を保持できる設定項目の場合は単純な上書きにならない場合もあります。
例えば、--global でメールアドレスを変更しても、リポジトリ内の --local に古いメールアドレスが残っている場合、ローカルの設定が優先されます。
原因切り分けのための確認コマンド:
特定のキー(例: user.email)に対して、現在どの値が最終的に有効になっているかを確認するには、スコープオプション(--global や --local)を省略してキー名のみを指定して実行します。
git config user.email不要なローカル設定を削除する場合は、--unset を使用します。
# user.email の設定が1つの場合git config --local --unset user.email
# 複数の設定が重複して残っている場合にすべて削除する場合git config --local --unset-all user.emailローカル設定を削除すると、グローバル設定などが再び適用されます。削除後は git config user.email を実行して、期待する有効値になっているか確認しましょう。
[!NOTE] コミット作者情報に関する環境変数と優先度 コミットの作者(Author)・コミッター(Committer)情報は、専用の設定項目や環境変数によって上書きされる場合があります。
- 専用の設定項目: Gitには
author.name/author.emailやcommitter.name/committer.emailという設定項目があり、これらは一般的なuser.name/user.emailよりも優先されます。- 環境変数:
GIT_AUTHOR_NAMEやGIT_AUTHOR_EMAIL、GIT_COMMITTER_NAMEやGIT_COMMITTER_EMAILなどの環境変数がセットされていると、設定ファイルの値に関わらず環境変数の値が記録されます。「configを変更したのに作者情報が変わらない」という場合は、環境変数がセットされていないか確認してください。
- Linux / macOS:
Terminal window env | grep -E '^(GIT_AUTHOR|GIT_COMMITTER|EMAIL)='- Windows (PowerShell):
Terminal window Get-ChildItem Env: | Where-Object Name -Match '^(GIT_AUTHOR|GIT_COMMITTER|EMAIL)'
設定変更後も過去のコミット履歴は自動で変わらない点に注意
git config でユーザー名やメールアドレスを変更した際によくある勘違いが、「過去にコミットした履歴の名前やアドレスもすべて変わる」という誤解です。
Gitのコミット履歴は暗号学的なハッシュ値(コミットID)で固定されているため、git config の変更は**「これから新しく作成するコミット」にのみ適用**されます。過去のコミット履歴が自動的に書き換わることはありません。
直前のコミットの作者情報を更新したい場合: 直前のコミットの作者情報を現在のコミッター情報に変更するには、次のコマンドを実行します。
git commit --amend --reset-author --no-edit--reset-author を指定すると、作者情報が現在のコミッター情報に変更され、作者日時も更新されます。実行前に user.name や user.email、関連する環境変数が意図した値になっていることを確認してください。
なお、この操作では新しいコミットが作成されるため、コミットID(ハッシュ値)が変わります。すでにリモートへプッシュ済みのコミットを書き換えると共有履歴に影響を及ぼすため、チームの運用ルールに従って対応してください。
発展:複数アドレスの誤爆防止と自動使い分けテクニック
複数のリポジトリや業務・プライベートを併用するエンジニア向けに、実務で非常に役立つ2つの設定を紹介します。
1. user.useConfigOnly による自動推測コミットの防止
新しいリポジトリで未設定のままコミットしようとした際に、Gitがシステム情報などから値を自動推測するのを防ぐには、次の設定が効果的です。
git config --global user.useConfigOnly trueこの設定を有効にすると、user.name や user.email が設定ファイルなどから取得できない場合に、Gitがシステム情報(ログイン名やホスト名)から値を自動推測することを防ぎ、必ずエラーとしてコミットを停止してくれます。
ただし、グローバル設定に会社用メールアドレスが登録されている場合、その値はプライベートリポジトリでも引き続き適用されます。そのため、この設定だけで「会社用アドレスでの誤コミット」を完全に防げるわけではありません。業務用とプライベート用を確実に使い分けるには、次で紹介する includeIf による自動切り替えや、リポジトリごとのローカル設定(--local)を併用しましょう。
2. includeIf によるディレクトリごとの自動切り替え
リポジトリごとに毎回 git config --local を設定するのが手間な場合は、Git 2.13以降で利用できる includeIf 条件分岐を活用するのがおすすめです。
例えば、~/work/ ディレクトリ配下にあるリポジトリだけ会社用の設定ファイルを自動で読み込ませることができます。
~/.gitconfig の記述例:
# デフォルト(プライベート用など)の設定[user] name = Taro Yamada email = taro.private@example.com
# ~/work/ 配下のすべてのリポジトリに適用する設定ファイルをインクルード[includeIf "gitdir:~/work/"] path = ~/.gitconfig-work~/.gitconfig-work の記述例:
[user] name = Taro Yamada (Work) email = taro.yamada@company.comこのように設定しておけば、リポジトリを作成・クローンしたディレクトリの場所に応じて自動で適切なメールアドレスが使い分けられるため、設定漏れの心配がなくなります。
[!TIP] includeIf 利用時の注意点
includeIfは、リポジトリの配置場所(ディレクトリパス)などの条件に応じて設定ファイルを動的に読み込む機能です。上記の例では~/work/配下にあるリポジトリのみを対象としています。末尾のスラッシュ(/)が抜けるとディレクトリ配下として正しく認識されないためご注意ください。- チルダ(
~)のパス展開について: チルダ(~/)によるホームディレクトリ指定は便利ですが、古いGitバージョンや環境(特にWindows環境など)によってはうまく解釈・展開されないケースが稀にあります。もし設定が反映されない場合は、絶対パス(例: Linux/macOSなら/home/<ユーザー名>/work/、WindowsならC:/Users/<ユーザー名>/work/※パス区切りはスラッシュ推奨)で記述すると確実です。- リポジトリを別のディレクトリへ移動した場合や、Gitの管理ディレクトリが通常と異なる構成(worktreeや別ドライブなど)の場合は、条件に合致しているか確認してください。
- 設定後は、対象のリポジトリディレクトリに移動して
git config user.emailやgit config --show-origin user.emailを実行し、意図したメールアドレスと設定ファイルが正しく適用されているか確認しましょう。
まとめ
本記事では、Gitの git config を用いた設定の確認・変更方法について、以下のポイントを中心に解説しました。
git configの変更方法には、コマンドライン(--global/--local)と設定ファイルの直接編集(.gitconfig/.git/config)の4つのアプローチがあること。- 基本的な設定ファイルの優先順位は「Local > Global > System」であり、用途に応じて
worktreeスコープやコマンド単位の設定(git -c)なども利用できること。 - コミットの作者・コミッター情報は、
author.*設定や関連する環境変数(GIT_AUTHOR_EMAIL等)によって上書きされる場合があるため、設定元と対象項目を正しく切り分けること。 - 現在の設定値は
git config --list --show-origin --show-scopeを使うことで、どの設定ファイル・どのスコープから読み込まれているかを正確に把握できること。 git configの変更は「以降の新しいコミット」に適用され、直前のコミットを修正したい場合はgit commit --amend --reset-authorを活用できること。
適切なスコープや user.useConfigOnly、includeIf などの機能を活用し、スムーズで安全なGit運用を行ってみてください。
以上で本記事の解説を終わります。
よいITライフを!
人気記事
- 1
- 2
- 3
- 4
- 5
とにかく挫折しない丁寧な解説。チーム開発での基本的な流れを確実にマスターできます。