Git基本コマンド

2020/07/03

今回は、Gitの基本コマンドをまとめてみました。

ちなみに、実践でたまに使いそうなコマンドは以下になります。

 
INDEX

 

設定(git config)


「~/.gitconfig」に書き込まれます。


# ユーザー名登録
$ git config --global user.name "hoge"

# メールアドレス登録
$ git config --global user.email "hoge@hogehoge.com"

 

設定ファイルについて
ファイル 対象 確認コマンド
/etc/gitconfig 全ユーザ git config --system -l
~/.gitconfig 特定ユーザ git config --global -l
~/.git/config 特定リポジトリ git config --local -l

 

ローカルリポジトリの作成(git init)


ローカルホストにリポジトリ用のファイルが「既にある」場合は git initコマンドを使います。
ローカルホストにリポジトリ用のファイルが「まだない」場合は git cloneコマンドを使います。


$ cd リポジトリ名

# リポジトリを作成
# .gitディレクトリが作成される
# .gitディレクトリを削除すればgit管理を辞めることができる
$ git init

# ローカルホストでREADME.mdファイルを作成し、リモートリポジトリを更新
$ echo "# リポジトリ名" >> README.md
$ git add README.md
$ git commit -m "first commit"

# リモートリポジトリのアドレスをoriginという名前に紐づける
$ git remote add origin https://github.com/ユーザー名/リポジトリ名.git

# ローカルリポジトリを、先ほど作成したリモートリポジトリへプッシュする
$ git push -u origin master

 

リモートリポジトリからプロジェクトをコピー(git clone)


# クローン先の配置先のディレクトリを指定
# 第二引数を省略した場合、クローンしたいリポジトリと同一の名称のディレクトリが生成される
$ git clone [リモートリポジトリパス] [ディレクトリ(省略可)]

# 実例
# リモートリポジトリ(laravel_app4)をローカルリポジトリ(laravel_app)としてクローン
$ git clone https://github.com/honjou/laravel_app4.git laravel_app

# サブモジュールを含んだプロジェクトを一発でクローン
git clone --recursive https://github.com/honjou/laravel_app4

 

実例(サブモジュールを含んだプロジェクトをクローン)


 

ファイル更新までの基本手順


# ファイルを追加
$ git add [ファイル名]
$ git add index.html //実例
$ git add *.html //すべてのhtmlファイル
$ git add --all //変更されたファイル全部

# ファイルをコミット
$ git commit -m "任意のコメント"
$ git commit -m "fix for #1" //実例
$ git commit -a -m "fix for #2" //-aオプションは変更を自動検出 

# masterを更新
$ git push origin master

 

ブランチの操作(git branch)


### ローカルブランチの作成

# ブランチの作成
$ git branch ブランチ名

# ブランチの作成(実例)
$ git branch staging


### ローカルブランチを削除

# ブランチの一覧表示
$ git branch

# ブランチの削除
$ git branch -d ブランチ名

# ブランチの削除(強制)
$ git branch -D ブランチ名


### リモートブランチを削除

# リモートブランチの一覧を確認
$ git branch --remote

# リモートブランチを削除
$ git push --delete origin ブランチ名

# リモートブランチを削除(実例)
$ git push --delete origin staging


### その他ブランチに関するコマンド

# ブランチの移動
$ git checkout ブランチ名

# ブランチの移動(実例)
$ git checkout staging

# 現在のブランチ名の変更
$ git branch -m ブランチ名

# ローカルブランチの一覧
$ git branch

# リモートとローカルのブランチの一覧
$ git branch -a

# リモートブランチの一覧
$ git branch -r

# リモートブランチへチェックアウト
$ git checkout -b branch_name origin/branch_name

 

ファイルを併合(git merge)



### developブランチをmasterブランチにマージ ###

# 1. masterブランチに移動
$ git checkout master

# 2. 差分を併合
$ git merge develop

# マージを取り消す(コンフリクトが発生して戻したい)
$ git merge --abort

 

ファイルを併合(git rebase)


# 新しい派生元に1つずつcheryy-pickしているイメージ
# 時系列に統合する場合はgit merge
# featureブランチにて
$ git rebase develop

###### rebaseの途中でコンフリクトしたら ######
# 「続ける」場合
# コンフリクトを解決し、対象のファイルをadd
# コミットする代わりに実行する感覚
$ git rebase --continue

# 「止める」場合
# rebaseを行う前の状態に戻す
# 途中まで行っていたrebaseが全て無かったことになる
$ git rebase --abort 

 

プッシュされているコミットの打ち消し(git revert)


# commit ID とは git log を叩くと出力されるハッシュ値
# 1回リバートするたびに自動的にコミットされる
$ git revert [commit ID]

# コミットせずにリバートする
# 複数のコミットを戻して、1つのコミットとしてプッシュする場合に便利
$ git revert [commit ID] -n

# コミットメッセージを編集しない
# "This reverts commit [commit ID]"というメッセージが設定される
$ git revert --no-edit [commit ID]

 

変更を一時的に避難(git stash)


# スタッシュの実行
# saveは省略することも可
$ git stash save

# メッセージをつけてスタッシュ
$ git stash save "2020-03-27"

# スタッシュしたリストを表示
$ git stash list

# スタッシュのリスト + 変更内容確認
# 終了は"q"
$ git stash -p

# 変更したファイル一覧を確認
$ git stash show [stash名]
# 実例
$ git stash show stash@{0}

# 避難させていたファイルの復活
$ git stash apply [stash名]
# 実例
$ git stash apply stash@{0}

# 削除
$ git stash drop [消したいstash名]
# 実例
$ git stash drop stash@{0}

# 復活 + 削除
$ git stash pop stash@{0}

 

addやcommitのやり直し(git reset)


# インデックスを現在のHEADの状態にする
# HEADとは「現在のブランチの先頭コミット」
$ git reset [commit id]

# インデックスから全てのファイルをアンステージ
$ git reset HEAD

# インデックスからファイルをアンステージする
$ git reset HEAD ファイル名

# インデックス、ワーキングツリーのデータを削除
# HEAD^:直前のコミットを意味する
# --hard コミットを取り消した上でワークディレクトリの内容も書き換える
$ git reset --hard HEARD^

# --soft ワークディレクトリの内容はそのままでコミットだけ取り消し
$ git reset --soft HEAD^

# 指定したコミットIDのコミットまで戻す
$ git reset --hard [commit id]
# 上記の実例
$ git reset --hard 3dc88f8

# 直前のリセットを取り消す
# ただしコミットしたデータだけでインデックス&ワーキングツリーのデータは戻らない
$ git reset --hard ORIG_HEAD

まだコミットしてないのに git reset してしまうと、変更は取り戻せなくなるので注意!

 

リモートリポジトリに変更を書き込む(git push)


# リモートリポジトリに変更を書き込む
$ git push 【リモートリポジトリのアドレス】 【ブランチ名】
# 実例
$ git push origin master

# 引数をすべて省略して、上流ブランチへプッシュ
# もし、上流ブランチの設定値がない場合は、デフォルトで「origin」がPush先のレポジトリになる
$ git push

# 強制的にプッシュ
$ git push -f origin master

### はじめてのプッシュ
# ローカルでstagingブランチを作成した場合、プッシュ時に上流ブランチとして認識させる
# -u オプション → ローカルのstagingブランチを上流ブランチとして設定
# 次回からは git push のみでOK
$ git push -u origin staging
# こっちでも可
$ git push --set-upstream origin staging

# 指定したブランチをリモートリポジトリから削除
$ git push [remote repository] :[branch]
# 実例
$ git push origin :foo

 

管理状態を確認(git status)


# 前回のコミットと比較してどのファイルが変更されたかを表示
$ git status

# 短い書式で表示
$ git status --short
# 上記のエイリアス
$ git status -s

 

git status

 

git status --short

 

表示 説明
M_ git add されているけどまだ git commit されていないファイルの一覧
_M 編集・変更・削除されているけど、まだ git add されていないファイルの一覧
?? Git管理されていない、かつ .gitignore で管理除外対象にもされていないものの一覧

 

不要になったローカルリポジトリの削除(rm -rf)


# コミット漏れがないか確認
$ git status

# リポジトリを最新に更新
$ git fetch
# 二つのログを比較してプッシュ漏れがないか確認
$ git log -1
$ git log -1 origin

# ディレクトリを消去
# rm はlinuxコマンド
# -r はディレクトリ -f 警告メッセージなし
$ cd ..
$ rm -rf リポジトリ名

 

実例


 

リモートリポジトリのデータ取得(git fetch)


### リモートの差分を確認してマージ

# ローカルリポジトリの中には「master」「origin/master」の2つの情報が置かれている
# 以下のコマンドで「origin/master」が最新
$ git fetch

# 現在のローカルの最新版(HEAD)とfetchで取得したリポジトリの最新版(HEAD)を比較する
$ git diff HEAD origin/master

# ファイル名のみ表示する
$ git diff HEAD origin/master --name-only

# 以下のコマンドでローカルにある「master」が最新になる
$ git merge origin/master

### 他のブランチにも取り込む
$ git checkout staging
$ git merge master

 

リモートリポジトリの変更を取り込む(git pull)


# リモートリポジトリの変更を取り込む
# git fetch + git merge = git pull
$ git pull [remote repository PATH] [branch]
# 実例
$ git pull origin master

####### ローカルのmasterを、強制的にリモートのmasterに合わせる ######
# 1)リモートの最新を取ってきておいて
$ git fetch origin master

# 2)ローカルのmasterを、リモート追跡のmasterに強制的に合わせる
$ git reset --hard origin/master

 
また、いろいろ発見したら随時追加していきます。

とりあえず、以上です。

 

【改訂新版】Gitポケットリファレンス

Gitの初歩的なことは一通り勉強していて、さらにもっとGitを使いこなしたいと思っている人におススメの本です。中身は基本的にリファレンスです。ただ、コマンドレベルの説明だけではなく、「使い方」や「エラーと対処法」など実用レベルで記述されています。普段のルーチン作業だけでは、すぐに細かいコマンドとか忘れがちになります。何かあったときのための備えとして、または辞書としてお手元に置いておくのもありかと思います。

Amazonで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-環境構築

おすすめ記事

動画で学習するなら ドットインストール、Schoo、Udemyのどれがいい?

独学に限界を感じたら Laravelが学べる!おススメのプログラミングスクール

フリーランスを目指すなら フリーランスエージェントTOP3