Git基本コマンド

2019/12/25

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

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

 
INDEX

 

1.設定(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

 

2.ローカルリポジトリの作成(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

 

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


# コマンドプロンプト/ターミナルを使ってローカルリポジトリに移動
$ cd [ローカルリポジトリのパス]

# Gitリポジトリのコピーを作成する
$ git clone [リモートリポジトリパス]

# 上記の実例
$ git clone https://github.com/jquery/jquery.git

 

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


# ファイルを追加
$ 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

 

5.ブランチの操作(git branch)


# ブランチの作成
$ git branch [branch_name]
$ git branch staging //実例

# ブランチの移動
$ git checkout [branch_name]
$ git checkout staging //実例

# ブランチの削除
$ git branch -d [branch_name]

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

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

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

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

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

 

6.ファイルを併合(git merge)


# ブランチに移動
$ git chekout [branch_name]

# 変更ファイルをコミット
$ git commit -a -m "コメント"

# masterに移動
$ git checkout master

# 差分を併合
$ git merge [branch_name]

# ファイルの更新
$ git push origin master

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

 

7.ファイルを併合(git rebase)


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

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

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

 

8.プッシュされているコミットの打ち消し(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]

 

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


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

# スタッシュのリストを表示
$ 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}

 

10.リセット(git reset)


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

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

# インデックス、ワーキングツリーのデータを削除
# HEADは直前のコミットIDにする
$ git reset --hard 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 してしまうと、変更は取り戻せなくなるので注意!

 

11.コンフリクトの解消

手動で解決する場合


# コンフリクトを解消しファイルを保存後、以下のコマンドを実行
$ git add {file_name}

$ git commit {file_name} -m "コミットメッセージ"

 

自動で解決する場合


# 現在のブランチを正とする
$ git checkout --ours {file_name}

# マージで指定したブランチを正とする
$ git chekout --theirs {file_name}

# 現在のブランチを正とする+全部
$ git checkout --ours .

# マージで指定したブランチを正とする+全部
$ git checkout --theirs .

 

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


# リモートリポジトリのアドレスを origin という名前に紐づける
$ git remote add origin https://github.com/ユーザー名/リポジトリ名.git
# ローカルリポジトリを、先ほど作成したリモートリポジトリへプッシュ
# リモートのoriginブランチをローカルのmasterブランチの上流ブランチとして設定
# 次回からは git push のみでOK
$ git push -u origin master

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

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

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

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

 

13.リモートリポジトリの変更を取り込む(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

 

14.管理状態を確認(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 で管理除外対象にもされていないものの一覧

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

とりあえず、以上です。

 

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

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

Amazonで詳細を見る

オススメ

 

本庄マサノリ

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

>> Twitter をフォローする

 

-環境構築