ファイルを修正してからプッシュするまで(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コマンドを叩く

  1. 対象ファイルの調査
  2. 対象ファイルの修正内容の確認
  3. ステージングエリアに追加
  4. コミット対象の確認
  5. コミット
  6. プッシュ

対象ファイルの調査

ワーキングディレクトリが対象

▼修正・削除・追加されたファイルの確認

$ 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/〇〇〇