ファイルを修正してからプッシュするまで(status,add,diff,commit,push)
GUIを使わずgitコマンドで対応。修正したファイルをステージングエリアに移動してコミットして、リモートリポジトリにプッシュ
作成日:2025-03-24, 更新日:2025-07-10
概要
基本、GUIであるSourcetreeを使ってpushしているけど、コマンドで対応する必要が出てきた
- ワーキングディレクトリ - ファイルを修正したりする場所
- ステージングエリア - コミット対象の情報を保存する場所
まとめ
▼対象ファイルの調査、内容確認、ステージングエリアに追加、コミット対象の確認、コミット
$ git status $ git diff --color 対象ファイルのPATH $ git add ファイル $ git diff --name-only HEAD $ git commit -m "コメント"
流れ
ファイルの追加・修正・削除したあと、gitコマンドを叩く
- 対象ファイルの調査
- 対象ファイルの修正内容の確認
- ステージングエリアに追加
- コミット対象の確認
- コミット
- プッシュ
対象ファイルの調査
ワーキングディレクトリが対象
▼修正・削除・追加されたファイルの確認
$ git status
ファイル名のみ出力
$ git status -s
「git status」だと情報が多いとき
▼修正 or 削除したファイルのみ
$ git diff --name-only
▼追加したファイルのみ
$ git ls-files --others --exclude-standard
修正内容の確認
$ git diff --color 対象ファイルのPATH
※「--color」を使うことで、色付きで分かりやすくなる
ステージングエリアに追加
ワーキングディレクトリで修正・削除・追加したファイル情報をステージングエリアに追加
$ git add ファイル
ディレクトリごと追加
$ git add ディレクトリ名/
ワイルドカードで追加
$ git add *.php
マルっとすべて追加
$ git add -A
コミット対象の確認
▼ステージングエリアにあるファイル
$ git diff --name-only HEAD
コミット
$ git commit -m "コメント"
ユーザー情報の設定
コミットしようとしたらエラーになった
$ git commit -m "〇〇〇〇" 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.
▼ユーザー情報を設定すれば解決
$ git config --global user.email "you@example.com" $ git config --global user.name "Your Name"
複数人で作業するとき
コミットする前に「$ git config --global user.email」を毎回実行(nameのほうも同様)
忘れる人を考えると、毎回クリアするのが良さげ
▼ユーザー情報のクリア
$ git config --unset user.name $ git config --unset user.email
クリアして設定して、コミット...は面倒なのでスクリプト化
コミットは「git commit」を実行するのではなく、スクリプトから実行させる
スクリプトでは毎回、ユーザー情報を設定してコミット。その後ユーザー情報をクリアしておく
▼スクリプト化(commit.sh)
#!/bin/bash
# 引数を確認
if [ "$#" -ne 3 ]; then
echo "Usage: $0 <username> <email> <commit message>"
exit 1
fi
# 引数から情報を取得
USERNAME=$1
EMAIL=$2
COMMIT_MESSAGE=$3
# Git ユーザー情報を設定
git config user.name "$USERNAME"
git config user.email "$EMAIL"
# コミット
git commit -m "$COMMIT_MESSAGE"
# Git ユーザー情報のクリア
git config --unset user.name
git config --unset user.email
# スクリプトの実行に成功したかどうかを出力
if [ $? -eq 0 ]; then
echo "Commit successful."
else
echo "Commit failed."
fi
▼実行権限の付与
$ sudo chmod +x commit.sh
▼コミット
$ commit.sh "ユーザー名" "メアド" "コミット時のコメント"
プッシュ
$ git push
基本的な流れ
リモートリポジトリから最新情報を取得
$ git fetch --all --prune
→ リモートリポジトリから取得、削除されたリモートブランチをローカルのリモート追跡ブランチ一覧から消す
▼上記をばらしたときのコマンド
$ git fetch --all $ git fetch --prune
developブランチからフィーチャーブランチ作成
$ git checkout develop $ git checkout -b feature/〇〇〇
リモートリポジトリからフィーチャーブランチをプル
初回
$ git fetch origin $ git checkout -b feature/〇〇〇 origin/feature/〇〇〇
2回目以降
$ git pull
ファイルをステージングエリアに追加して、コミット
ファイルをステージングエリアに追加
対象指定して追加
$ git add 〇〇〇
全ファイル追加
$ git add -A
コミット
$ git commit -m "コメント"
リモートリポジトリにプッシュ
初回
$ git push -u origin feature/〇〇〇
2回目以降
$ git push
フィーチャーブランチ削除
マージしていないとエラーになる
そのときは「-d」を「-D」にすれば強制削除となる
ローカルリポジトリからフィーチャーブランチ削除
$ git branch -d feature/〇〇〇
リモートリポジトリからフィーチャーブランチ削除
$ git push origin --delete feature/〇〇〇
マージ
ブランチを切替えて組込みたいフィーチャーブランチを指定
developブランチにマージ
$ git checkout develop $ git pull origin develop $ git merge --no-ff feature/〇〇〇
別のフィーチャーブランチにマージ
$ git checkout feature/□□□ $ git pull origin feature/□□□ $ git merge --no-ff feature/〇〇〇