Gitコマンド(逆引きリファレンス)

2019/04/04

なかなか git コマンドが覚えられないので自分用にまとめてみました。

逆引きリファレンス形式です。

 
INDEX

1.最初にやること

「リポジトリの作成」「リポジトリの取得」「gitの設定」「リモートリポジトリの追加」

リポジトリの作成

リポジトリを作成し、.gitディレクトリを作成します。


$ git init

 

リポジトリの取得

すでにリポジトリが作成されている場合はここからスタート。

Bitbucket からリポジトリをクローンして、ローカルリポジトリを作成します。

チェック
この場合は init を行う必要はありません。

1.Bitbucket の自分のリポジトリを表示

2.画面右上に「clone」というのがあるのでコピペ

3.Git bash を開いてリモートリポジトリをクローンしてくる場所まで移動


$ cd /c/xampp/htdocs/article

 
4.クローンを実行


$ git clone https://laraweb@bitbucket.org/laraweb/article.git

これで自分のPCにローカルリポジトリが出来ます。

POINT!

この場合、 /c/xampp/htdocs/article がリポジトリのルートディレクトリになります。

 

git の設定

設定に対する確認や変更などの処理はgit configコマンドを使います。


$ git config --global user.name [名前]
$ git config --global user.email [email]
$ git config --local core.quotepath false

 

ポイント

設定の内容を確認したい場合は


$ git config

 

リモートリポジトリの追加


# 形式
$ remote add <名前> url
# 実例
$ git remote add origin git@bitbucket.org:test/mytodolist.git

 

HerokuにあるGitリポジトリを追加

$ heroku git:remote --app [APPNAME]

 

2.ローカルリポジトリでの作業

ローカルリポジトリとはユーザー1人1人が利用するために、自分の手元のPC上に配置するリポジトリのことです。

「リモートの変更点を取り込む」「変更点をaddする」「変更点をcommitする」「変更点をpushする」「基本の流れ」

リモートの変更点を取り込む

【 使いどころ 】リモートリポジトリの内容を取り込むとき

リモートリポジトリの変更点を、ローカルリポジトリにマージします。


$ git pull

 
例)master ブランチを最新にするケース


$ git checkout master
$ git pull origin master

 

変更点を add する

インデックスにファイルを登録する作業です。


$ git add [ファイルパス]

 
-A のオプションをつけることで、変更があったすべてのファイルを add します。


$ git add -A

 

変更点を commit する


$ git commit -m "commitメッセージ"

 

変更点を push する


$ git push origin [ ローカルブランチ名 ]

 

HerokuにあるGitリポジトリにプッシュ

$ git push heroku master

 

基本の流れ

例)a.txt をリモートリポジトリにプッシュする


$ git add a.txt
$ git commit -m "新しく a.txt を追加"
$ git push origin mybranch

 

3.ブランチの操作(ローカル側)

「ブランチの一覧を見る」「ブランチの切り替え」「ブランチの作成」「ブランチの削除」「ブランチの作成+作ったブランチに移動」「ブランチをディレクトリみたいに扱う」

ブランチの一覧を見る

作成したローカルのブランチを一覧で確認します。


git branch

POINT!

オプションに a を入れるとリモートブランチも出てきます。よく使うのはこっち。


$ git branch -a

 

ブランチの切り替え


$ git checkout master

 

ブランチの作成

現在のブランチから派生ブランチを作成。


$ git branch mybranch

 

ブランチの削除


$ git branch --delete mybranch

 

ブランチの作成+作ったブランチに移動


$ git checkout -b mybranch

 

ブランチをディレクトリみたいに扱う

ブランチにスラッシュを使うと実現できます。


$ git checkout -b feature/mybranch

POINT!

実際はディレクトリを作成しているのではありません。あくまでも ファイル名 です。なので、以下の手順だとエラーになります。


$ git checkout -b feature
$ git checkout -b feature/mybranch

 

4.ブランチの操作(リモート側)

「ブランチの一覧を見る」「ブランチをリモートに登録」「ブランチの削除」

ブランチの一覧を見る

リモートブランチの一覧を表示します。


$ git branch --remote

POINT!

(作成した)ローカルブランチ+リモートブランチの表示。よく使うのはこっち。


$ git branch -a

 

ブランチをリモートに登録

プッシュ時に新しく作ったブランチをリモートにも登録します。通常、ローカルブランチ名と同じ名前にします。


$ git push origin mybranch

 

ブランチの削除


$ git push --delete origin mybranch

POINT!
リモートリポジトリ上で直接ブランチを消すと、git branch -a コマンドを実行しても表示されます。そんなときは以下のコマンドで反映されるようになります。


$ git remote prune origin

prune という言葉には「余計な枝を切り払う」という意味があるそうです。

 

5.Git のローカルブランチを作成しリモートに push の流れ

ローカルブランチの作成

$ git branch develop

 

作業場所を変更

$ git checkout develop

 

今いるブランチを確認

$ git branch

*develop
 master

 

作業

develop ブランチ上で作業します。test.html を作成したとします。

 

変更が加えらえたファイルを表示

develop ブランチで新しく作業を行ったため、その対象である test.html が表示されます。


$ git status

 

ステージングに移動

$ git add test.html

 

コミット

$ git commit -m "second commit"

 

リモートリポジトリにプッシュ

プッシュ先を develop ブランチに指定します。


$ git push origin develop

ポイント

2回目以降はgit pushのみでOK

 

6.他ブランチをmasterにマージする流れ

開発用ブランチ(develop)へ移動

$ git checkout develop

ポイント

master ブランチからdevelopブランチを切ってください。

 

sample.html 作成

$ touch sample.html

 

ステージング・エリアに移動

$ git add sample.html

 

もし、作業途中のもので commit 出来るものがあれば commit しておく

$ git commit -m "create sample.html"

ポイント

コミットしたファイルがマージ対象ファイルになります。ブランチの変更の取り込み漏れの原因になるので、全てコミットが済んでいる状態で git merge するようにします。

 

masterブランチへ移動

$ git checkout master

 

git pullでmasterを最新に

$ git pull origin master

ポイント

developブランチで作業をしている間に origin/master ブランチが更新されている可能性があるので、一旦ここで最新にします。

 

mergeコマンドでdevelopの内容を取り込む

$ git merge develop

ポイント
「マージすべて完了!でもやっぱりやめよう。。」のケース

# マージする前のHEADに戻ります
$ git reset --hard ORIG_HEAD

 

ファイルの変更履歴を確認

$ git log --oneline -3

ポイント

オプションで出力行数指定(3桁)にしています。

 

7.特定のコミットまで戻したい場合

戻す対象のハッシュ値を調べる

$ git log --oneline -5

 

指定したハッシュ値のコミットまで戻す

$ git reset --hard {ハッシュ値}

ポイント
オプション

--hard コミット、インデックス、ファイルの変更をすべて削除する。
--mixed コミット、インデックスを削除。ファイルの変更だけは残す。
--soft コミットだけを削除する。インデックス、ファイルの変更は残す。
 

直前のコミットを取り消す

直前のコミットを取り消す場合は以下のコマンドでも可能です。


git reset --hard HEAD^

 

ちゃんと消えたか確認

$ git log --oneline -5

ポイント

「やっぱりさっきのgit resetをなかったことにしたい」
そんなコマンドも実は用意されています。


# 直前のリセットを取り消す
$ git reset --hard ORIG_HEAD

 

8.git push を取り消したい場合

直前のコミットを取り消す

$ git reset --hard HEAD^

 

強制的に Push する

$ git reset -f origin master

ポイント

実は、この書き換えたブランチを push しようとすると、リモートにある以前のコミットとコンフリクト(リモートより歴史が短いブランチをプッシュしているため)して push できません。なので、強制的にプッシュさせる「-f」オプションを付けて強引に上書きします。

 

ちゃんと消えたか確認

$ git log --oneline -5

 

9.開発用ブランチに切り替えて作業を開始

masterブランチにチェックアウト

$ git checkout master

 

最新の状態にしておく

$ git pull origin master

 

他のブランチに切り替える

$ git checkout develop

 

masterブランチを取り込む

$ git merge master

 

10.変更箇所を一時的に避難させて、別の作業をデプロイ

現在の作業を一時避難

# 書式
$ git stash save "{任意のメッセージ}"

# 今日の日付を入れるとわかりやすいかも?
$ git stash save "2019-02-28"

 

避難した作業を確認

# 保存されている stash を一覧表示できます。
$ git stash list

ポイント

実行時には以下のように情報が出力されます。


# 書式
「stash@{番号}」:On 「ブランチ名」:「メッセージ」

# 例
stash@{0}: On develop: 2019-02-28

 

別の作業をしてコミット

急遽発生した作業を消化 → コミット → masterにマージ → プッシュ

 

一時避難した処理を元に戻す

# 書式
$ git stash apply {復旧したい stssh 名}

# 例
$ git stash apply stash@{0}

ポイント

stash名を省略すると、一番最新のstashを復旧します。


git stash apply

 

スタッシュを削除

# 書式
$ git stash drop {削除したい stash 名}

# 例
git stash drop stash@{0}

ポイント

stash名を省略すると、一番最新のstashが削除されます。


git stash drop

 

11.すでにGitの管理下にあるものを除外する

すでに管理対象となっているファイルは、.gitignore に記述しただけでは対象から外れません。以下の作業を行います。

.gitignore に追加

例:Thumbs.db を除外


# Thumbs.db すべて無視されます。
Thumbs.db

 

ファイルを管理対象から除外する

# 書式ーファイルの場合
$ git rm --cached {ファイル名}

# 例
$ git rm --cached public/images/Tumbs.db

# ディレクトリごと
$ git rm -r --cached {ディレクトリ名}

# 例
$ git rm -r --cached .idea/

ポイント

--cached オプションを付けることにより、ファイルを残したまま管理対象から外すことができます。
--cached オプションをつけないと、ファイルごと削除されるので注意!

 

コミットする

$ git add .gitignore
$ git commit -m "change the setting of .gitignore"

このあとリモートにプッシュすると、リモートにあるTumbs.dbは削除されます。

ローカルにあるTumbs.dbは削除されません。

 

12.git pull の取り消し

1つ前の状態に戻す

$ git reset -hard HEAD^

ポイント
-hard
ワークディレクトリの物理的変更を行う(ワークディレクトリの内容も書き換える)
HEAD^
1つ前の状態

 

直前以外

git reflog

ポイント

reflog(参照ログ)とはHEADやブランチ先端の動きの履歴です。
・各個人のローカルリポジトリに存在します。
・ブランチの切り替え、新たに加えられた変更のプル、履歴の書き換え、あるいは単なる新規コミットの実行などを記録します。

git reflog で履歴を確認してから「HEAD@{1}」などを指定してresetします。


git reset --hard HEAD@{1}

 

13.git push ができない

git push したら以下のエラーが表示

To git@github.com:◯◯◯.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:◯◯◯.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

これは自分がリモートの変更をpullしてから、pushするまでの間に他のpushがあるなどしてリモートが変更されているためです。
(※ブランチの先端がリモートより後ろになっているためです。)

対策方法

この場合、 git pull すると解決します。


$git pull

 

14.git pull ができない

git pull したらコンフリクト

error: Your local changes to the following files would be overwritten by merge:
    ディレクトリ名/ファイル名
Please, commit your changes or stash them before you can merge.

 
対策方法

この場合、 git stash すると解決します。


$ git stash

このあと git pull を実行します。

git pull ができたら一時避難したデータをもとに戻します。


$ git stash apply

もとに戻したら削除で完了。


$ git stash drop

 

15.git checkout ができない

git checkout したらエラー

ブランチを切り替える時に下記エラーが出て切り替えられないことがあります。


error: Your local changes to the following files would be overwritten by checkout:
    abc.txt
    hogehoge.ctp
Please, commit your changes or stash them before you can switch branches.
error: The following untracked working tree files would be overwritten by checkout:
    abc.txt
Please move or remove them before you can switch branches.
Aborting

 
対策方法

この場合、 git stash すると解決します。


$ git stash save "2019-04-04"

このあと git checkout master を実行します。

git checkout ができたら一時避難したデータをもとに戻します。


$ git stash apply

もとに戻したら削除で完了。


$ git stash drop

ポイント

その他のやり方として問題のデータをコミットしておくやり方があります。(※push はしません。)
変更履歴を戻すには、コミットしたブランチに戻ってから
git reset --soft HEAD^
git reset

 

16.git pull する前に差分を確認

git pull はいうなれば「git fetch & git merge」なので、git pull を実行すると、いきなりローカルブランチにマージがかかってしまいます。

これを事前に diff で差分を確認してから、git pull をします。

masterブランチを例で書くと以下のようになります。


// リモートを取ってくる
git fetch origin master

// [ローカル] → [リモート追跡]の差分を見る
git diff master origin/master

// 問題ないことが確認できたら..
git merge origin/master

 
 
何か気づいたら、また随時追加していく予定です。

本庄マサノリ

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

 

-環境構築