「git commit や git push の違いが頭の中でごっちゃになっている」
Linuxサーバーを扱う現場では、設定ファイルやスクリプトのバージョン管理にgitを使うケースが当たり前になっています。コンテナ・IaCツール(Ansible、Terraform)との連携でも、gitの操作は避けて通れません。
この記事では、Linuxサーバー上でgitコマンドを初めて使う方に向けて、インストールと初期設定からcommit・push・branchの基本操作、よくあるエラーの対処法まで体系的に解説します。RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済みです。
この記事のポイント
・git init でローカルリポジトリを作成し、git add → git commit の流れで変更を記録する
・git clone でリモートリポジトリをサーバーへ取得し、git push で変更を反映する
・ブランチを使うことで本番環境への影響なく設定変更をテストできる
・.gitconfigの初期設定(user.name・user.email・core.editor)は最初に済ませる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
gitとは何か?バージョン管理の基礎を押さえる
gitは「分散型バージョン管理システム」です。ファイルの変更履歴を記録し、過去の状態に戻したり、変更の差分を確認したりできます。サーバー管理の場面では次のような使い方が主です。
・設定ファイルの変更管理:/etc/nginx/nginx.conf や /etc/haproxy/haproxy.cfg などをgit管理し、変更前にいつでも戻せる状態にする
・シェルスクリプトの管理:自作のデプロイスクリプトや監視スクリプトをリポジトリで一元管理する
・チームでの設定共有:GitHubやGitLabにpushして複数人で設定ファイルを共有する
・IaCとの連携:AnsibleのPlaybookやTerraformの定義ファイルをgitで管理し、CI/CDパイプラインへ組み込む
「バックアップとどう違うの?」という疑問をよく受けます。バックアップは「ある時点のコピー」を保存しますが、gitは「何を・いつ・なぜ変えたか」を記録します。差分の比較や特定の変更の取り消しが、バックアップより格段に楽になります。
gitのインストールと初期設定
1. gitのインストール
RHEL/CentOS/AlmaLinux系(dnfまたはyum):# RHEL 9 / AlmaLinux 9 / Rocky Linux 9 $ sudo dnf install -y git # インストール確認 $ git --version git version 2.43.5
# Ubuntu 24.04 LTS $ sudo apt install -y git $ git --version git version 2.43.0
2. ユーザー情報の初期設定(必須)
gitはコミットに「誰が変更したか」を記録します。インストール後は最初にこの設定を行ってください。# 名前を設定(コミット履歴に表示される) $ git config --global user.name "Tomohiro Miyazaki" # メールアドレスを設定 $ git config --global user.email "admin@example.com" # デフォルトエディタをviに設定(なくてもよいが、慣れているエディタを指定するとよい) $ git config --global core.editor vi # 設定確認 $ git config --list user.name=Tomohiro Miyazaki user.email=admin@example.com core.editor=vi
3. デフォルトブランチ名の設定(RHEL 9以降推奨)
最近のgitはデフォルトブランチ名を `main` にするよう推奨しています。チームの規約に合わせて設定しましょう。# デフォルトブランチを main に設定 $ git config --global init.defaultBranch main
リポジトリの作成とcloneの基本
1. git init — 新規ローカルリポジトリを作成する
新しいリポジトリを作成するには `git init` を実行します。# 作業ディレクトリを作成してリポジトリを初期化 $ mkdir /home/admin/my-scripts $ cd /home/admin/my-scripts $ git init Initialized empty Git repository in /home/admin/my-scripts/.git/ # .gitディレクトリが作成されたことを確認 $ ls -la total 0 drwxrwxr-x. 3 admin admin 18 May 24 10:12 . drwx------. 5 admin admin 67 May 24 10:12 .. drwxrwxr-x. 7 admin admin 119 May 24 10:12 .git
2. git clone — リモートリポジトリを取得する
GitHubやGitLabにあるリポジトリをサーバーに持ってくるには `git clone` を使います。# HTTPS でclone(ユーザー名・パスワードまたはトークン認証) $ git clone https://github.com/example/ansible-playbooks.git # SSHでclone(公開鍵認証設定済みの場合) $ git clone git@github.com:example/ansible-playbooks.git # ディレクトリ名を指定してclone $ git clone https://github.com/example/ansible-playbooks.git /opt/ansible # cloneしたリポジトリを確認 $ ls -la ansible-playbooks/ total 8 drwxrwxr-x. 4 admin admin 55 May 24 10:15 . drwx------. 7 admin admin 120 May 24 10:15 .. drwxrwxr-x. 8 admin admin 163 May 24 10:15 .git -rw-rw-r--. 1 admin admin 543 May 24 10:15 README.md drwxrwxr-x. 3 admin admin 35 May 24 10:15 roles
ファイルの追加・コミット・履歴確認
1. git status — 変更状態を確認する
作業中は `git status` で現在の状態を確認する習慣を持つことが重要です。$ cd /home/admin/my-scripts $ echo '#!/bin/bash' > check-disk.sh $ git status On branch main No commits yet Untracked files: (use "git add
..." to include in what will be committed) check-disk.sh nothing added to commit but untracked files present (use "git add" to track)
2. git add — ステージングエリアにファイルを追加する
`git commit` の前に、コミットに含めるファイルを `git add` でステージングエリアに登録します。# ファイルを1つ追加 $ git add check-disk.sh # 現在のディレクトリ内すべてを追加(.gitignoreで除外されたものを除く) $ git add . # ステージング状態を確認 $ git status On branch main No commits yet Changes to be committed: (use "git rm --cached
..." to unstage) new file: check-disk.sh
3. git commit — 変更を記録する
ステージングしたファイルを `git commit` でリポジトリに記録します。# -m でコミットメッセージを指定(推奨) $ git commit -m "add check-disk.sh: /var と /tmp の使用率を確認するスクリプト" [main (root-commit) a3f1b9c] add check-disk.sh: /var と /tmp の使用率を確認するスクリプト 1 file changed, 12 insertions(+) create mode 100755 check-disk.sh
4. git log — コミット履歴を確認する
# 全履歴を表示 $ git log commit a3f1b9c7d8e2f1a4b5c6d7e8f9a0b1c2d3e4f5a6 Author: Tomohiro Miyazaki
Date: Sat May 24 10:20:33 2026 +0900 add check-disk.sh: /var と /tmp の使用率を確認するスクリプト # 1行でコンパクトに表示 $ git log --oneline a3f1b9c add check-disk.sh: /var と /tmp の使用率を確認するスクリプト # 直近5件だけ表示 $ git log --oneline -5
5. git diff — 変更差分を確認する
コミット前に何を変更したか確認するには `git diff` を使います。# ステージング前の変更を確認(作業ツリー vs インデックス) $ git diff # ステージング後の変更を確認(インデックス vs 最新コミット) $ git diff --cached # 特定のコミットとの差分を確認 $ git diff a3f1b9c HEAD
ブランチの作成と切り替え
1. ブランチの基本概念
ブランチを使うと、本番の設定(mainブランチ)に影響を与えずに変更を試せます。サーバー管理での典型的な使い方は「作業ブランチを作成 → 変更してテスト → mainにマージ」の流れです。2. git branch / git switch — ブランチを作成・切り替える
# ブランチ一覧を確認(*が現在のブランチ) $ git branch * main # 新しいブランチを作成 $ git branch feature/add-log-rotate # ブランチを切り替える(git 2.23以降はswitchが推奨) $ git switch feature/add-log-rotate Switched to branch 'feature/add-log-rotate' # ブランチ作成と切り替えを同時に行う(-c オプション) $ git switch -c feature/update-nginx-conf Switched to a new branch 'feature/update-nginx-conf'
3. git merge — ブランチを統合する
作業ブランチでの変更をmainに取り込むには `git merge` を使います。# 作業ブランチで変更をコミットした後、mainに切り替えてマージ $ git switch main Switched to branch 'main' $ git merge feature/add-log-rotate Updating a3f1b9c..d4e5f6a Fast-forward logrotate.conf | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 logrotate.conf # マージ済みブランチを削除 $ git branch -d feature/add-log-rotate Deleted branch feature/add-log-rotate (was d4e5f6a).
リモートリポジトリとの連携(push・pull・fetch)
1. git remote — リモートリポジトリを設定する
ローカルのリポジトリをGitHubなどのリモートと紐付けます。`git clone` した場合は `origin` という名前でリモートが自動設定されています。# リモートの一覧を確認 $ git remote -v origin https://github.com/example/ansible-playbooks.git (fetch) origin https://github.com/example/ansible-playbooks.git (push) # 新しくリモートを追加(git initした場合) $ git remote add origin https://github.com/example/my-scripts.git # リモートのURLを変更(HTTPSからSSHへの切り替えなど) $ git remote set-url origin git@github.com:example/my-scripts.git
2. git push — ローカルの変更をリモートへ送信する
# mainブランチをoriginにpush(初回は -u でトラッキング設定) $ git push -u origin main Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 4 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (5/5), 512 bytes | 512.00 KiB/s, done. Total 5 (delta 0), reused 0 (delta 0), pack-reused 0 To https://github.com/example/my-scripts.git * [new branch] main -> main Branch 'main' set up to track remote branch 'main' from 'origin'. # 2回目以降は -u 不要 $ git push
3. git pull — リモートの変更を取得して統合する
他のメンバーやCI/CDが更新したリモートの変更をローカルに取り込みます。# リモートの変更を取得してマージ(fetch + merge) $ git pull origin main From https://github.com/example/my-scripts * branch main -> FETCH_HEAD Updating a3f1b9c..f7g8h9i Fast-forward check-disk.sh | 5 +++++ 1 file changed, 5 insertions(+)
4. git fetch — リモートの情報だけ取得する(マージしない)
`git pull` は取得+マージを一度に行いますが、`git fetch` は取得だけを行います。リモートの状況を確認してからマージを判断したい場合に使います。# リモートの変更を取得(ローカルには反映しない) $ git fetch origin # fetchで取得した内容とローカルの差分を確認 $ git diff main origin/main # 確認後にマージ $ git merge origin/main
実務で必ず知っておくべき操作集
1. .gitignore — 追跡対象から除外する
パスワードを含む設定ファイルや、一時ファイル・ログファイルはgit管理対象から除外します。# .gitignoreファイルを作成 $ cat > .gitignore << 'EOF' # 一時ファイル *.tmp *.bak *.log # パスワードや鍵ファイル(絶対にgit管理しない) *.pem *.key .env secrets/ # Vim のスワップファイル *.swp EOF $ git add .gitignore $ git commit -m "add .gitignore: ログ・一時ファイル・秘密情報を除外"
2. git stash — 変更を一時退避する
作業途中で急に別のブランチに切り替えなければならない場合、`git stash` で変更を一時退避できます。# 変更を退避 $ git stash Saved working directory and index state WIP on main: a3f1b9c add check-disk.sh # 退避の一覧を確認 $ git stash list stash@{0}: WIP on main: a3f1b9c add check-disk.sh # 退避した変更を元に戻す(stashは残す) $ git stash apply # 退避した変更を元に戻してstashを削除する $ git stash pop
3. git show — コミットの詳細を確認する
# 最新コミットの詳細を確認 $ git show HEAD # 特定コミットの詳細 $ git show a3f1b9c # 特定コミットの特定ファイルの内容 $ git show a3f1b9c:check-disk.sh
トラブルシュート・よくあるエラー対処
1. 「Please tell me who you are.」が出た場合
git commit 時にこのメッセージが出たら、ユーザー情報が未設定です。# エラー例 $ git commit -m "test" 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" # 対処 $ git config --global user.email "admin@example.com" $ git config --global user.name "Tomohiro Miyazaki" $ git commit -m "test"
2. 「merge conflict」が発生した場合
同じファイルの同じ箇所を複数人が変更してpushすると、コンフリクト(競合)が起きます。# コンフリクト発生時のメッセージ $ git pull Auto-merging nginx.conf CONFLICT (content): Merge conflict in nginx.conf Automatic merge failed; fix conflicts and then commit the result. # コンフリクトファイルには以下のマーカーが挿入される <<<<<<< HEAD worker_processes 4; # ローカルの変更 ======= worker_processes 8; # リモートの変更 >>>>>>> origin/main # 手動でファイルを編集してマーカーを削除した後 $ git add nginx.conf $ git commit -m "resolve conflict: worker_processes を 8 に統一"
3. 直前のコミットメッセージを修正する(まだpushしていない場合のみ)
# 直前のコミットメッセージを変更(push前のみ。push後は絶対に使わない) $ git commit --amend -m "正しいメッセージに修正"
4. git push が rejected される場合
# エラー例 $ git push ! [rejected] main -> main (fetch first) error: failed to push some refs to 'origin' hint: Updates were rejected because the remote contains work that you do hint: not have locally. # 対処: まずpullして最新状態に合わせてからpush $ git pull origin main $ git push origin main
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| リポジトリを新規作成 | git init |
| リモートリポジトリを取得 | git clone URL |
| 変更状態を確認 | git status |
| ファイルをステージング | git add ファイル名 |
| 変更を記録 | git commit -m "メッセージ" |
| 履歴を確認 | git log --oneline |
| 差分を確認 | git diff |
| ブランチを作成・切り替え | git switch -c ブランチ名 |
| ブランチを統合 | git merge ブランチ名 |
| リモートへ送信 | git push origin main |
| リモートから取得して統合 | git pull origin main |
| 取得のみ(統合しない) | git fetch origin |
| 変更を一時退避 | git stash |
シェルスクリプトとgitを組み合わせた自動化については、Linux基本コマンドの解説も合わせて参照してください。
gitでコミットするシェルスクリプトの書き方については Linux ポート確認の全コマンド と組み合わせた運用スクリプト、サーバー管理では Linux DNS 設定の基本 の設定ファイルをgitで管理するパターンも参考にしてください。
Linux無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:bashのfor文・while文・until文の使い方|ループ処理の基本から実践例まで
- この記事の属するカテゴリ:Linuxtips・シェルスクリプトへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます