ギークなエンジニアを目指す男

機械学習系の知識を蓄えようとするブログ

よくつかうGitコマンドをまとめてみた

Gitコマンドをまとめて書いておきます。
いろいろまとめてくれているサイトはあるのですが、細かいコマンドも併せてまとめている記事がすくない(?)と感じたため、自分の知っているコマンドたちは利用シーンなんかも併せて載せていければと思っています。
ルールとして、#から始める文字列はコメント、[]で括られている箇所はユーザが与える任意の文字列とします。

ローカルリポジトリの作成

これはGitでバージョン管理するためのはじめの一歩です。
まずGit管理下にしたいディレクトリ(フォルダ)を作成し、ターミナルでそのディレクトリまで移動します。 そこで下記コマンドを実行して、Git管理下にします。

$ git init

Initialized empty Git repository in ~~~

と表示されれば成功です。

※ちなみに、すでにGit管理下になっている場合は
Reinitialized existing Git repository in~~~ と表示されます。

この処理で現在のディレクトリに.gitフォルダが作成されていると思います。
(隠しファイルになっているので、エクスプローラやFinderからはそのままでは見えないかもしれません)

ステージへの追加(add)

該当のディレクトリにファイルやフォルダを置いたら、

$ git add [ファイル名 or フォルダ名]

とコマンドを入力します。 上記のコマンドを叩くと、リポジトリに圧縮ファイルが、ステージにインデックスファイルが作成されます。

圧縮ファイル?ステージ?なんだよソレという方は下記記事を参照ください。

taxa-program.hatenablog.com

入力してEnter後、何もメッセージが表示されなければ成功です。
addコマンドには下記のような様々なオプションが指定でき、覚えると格段に楽になります。
(オプション指定しない場合は-Aと同等)

$ git add -A #新規作成/変更/削除されたファイル全てを追加(AllのA)  
$ git add -u #変更/削除されたファイルを追加。新規作成は対象外。(updateのu)   
$ git add . #新規作成/変更されたファイルを追加。削除は対象外。  
$ git add *.md #ファイル形式を指定して追加。
$ git add -n #addされるファイル一覧を表示

基本的には、ファイルを作成 or 修正したら、git add -nコマンドでステージに追加されるファイルを確認し、OKであれば git add -uなどでステージに追加する、という流れが良いかと思います。

ステージにインデックスを追加したら,次は登録(commit)し、リポジトリに反映させます。

ローカルリポジトリへのcommit

$ git commit -m "初めてのGitHub"

上記コマンドで,インデックスの内容が全てローカルリポジトリに登録されます。
細かく説明すると、ツリーファイルとコミットファイルがリポジトリに作成されます。
-mはコメント追加のオプションです。このオプションを追加しなかった場合、Gitでデフォルト指定しているエディタが起動し、 そこでコメントを追加することができます。ただし、いちいち「エディタが起動→コメント入力→エディタを終了」は面倒くさいので、-mオプションは付けることをオススメします。 また、-vオプションをつけることで、変更箇所を確認してcommitすることができます。
この時点では,『ローカル』リポジトリなので、リモートリポジトリ(GitHub)上には反映されておりません。

基本的な作業の流れとしては、上記までで紹介した通り、 ファイルの作成 or 編集 → ステージへadd → リポジトリにコミット
の繰り返しになると思います。

git addのやり直し(取消)

# 全て一括で取り消す場合(2つは同義)
$ git reset HEAD .
$ git reset .

# ファイル指定で取り消す場合(2つは同義)
$ git reset HEAD [file_path]
$ git reset [fie_path]

間違えて修正途中でステージに追加しちゃった、などのときに使います。
ここで注意してほしいのが、このgit resetコマンドではインデックスを(直前のコミット状態に)リセットしているのであって、最後のaddを取り消ししているのはないということです。
例えば、git addを2回行った後に、git resetを行うと、2回のaddがリセットされます。(最後の1回のaddが取り消される訳ではない)

git commitのやり直し

$ git commit --amend

例えば、Aファイルを追加してgit add, git commitした後に、Bファイルを追加し忘れていた場合、Bファイルを作成後、git addを行った後に今回のコマンドgit commit --amendを利用したりします。
この場合、元のコミットを上書きするのではなく、元のコミットを無効にして、新たなコミットを作るという動作になります。

ファイルの削除を記録する

# ファイルごと削除する場合(リポジトリとワークツリーの両方から削除)
$ git rm <ファイル名>
$ git rm -r <ディレクトリ名>

# ファイルを残す場合(gitからのみ削除(ワークツリー上は残す!!))
$ git rm --cached <ファイル名>

基本的に--cachedオプション付けた方が良いのかな?と思います。

ブランチの作成/移動/削除/変更/一覧/

$ git branch [branch_name]  #ブランチの作成
$ git checkout [branch_name]  #ブランチの移動
$ git branch -d [branch_name]  #ブランチの削除(deleteのd)
$ git branch -m [branch_name]  #現在のブランチ名の変更
$ git branch # ローカルブランチの一覧表示(現在いるブランチには*が付きます)
$ git branch -a #リモートとローカルのブランチの一覧
$ git branch -r #リモートブランチの一覧
$ git checkout -b branch_name origin/branch_name //リモートブランチへチェックアウト

今自分がいるブランチどこだっけ?というときに使えます。

GitHubにデータを送信する(リモートリポジトリにデータをプッシュする)

GitHubにログインし、該当のURLをコピーしてください。

f:id:taxa_program:20171127003254p:plain

# originというショートカットでurlのリモートリポジトリを登録
$ git remote add origin [上記URL(https://~~)]

そしてコミットされたデータをGitHubに送信(プッシュ)します。
上記のように登録した場合、下記コマンドでPUSHすることが可能です。

# git push [リモート名] [ブランチ名]
# 例
$ git push origin master

ちなみに、初回PUSH時に-uオプションをつけることにより、以降はgit push のみで送信することが可能になります。

$ git push -u origin master
・・・
$ git push

他人のGitリポジトリをローカルにコピーする

下記コマンドでクローン(コピー)を作成できます。

$ git clone https://github.com/~~~~

このコマンドで、ファイル群とgitリポジトリがローカルにコピーされます。

その他の便利なコマンド

$ git status #ワークツリー、ステージ、リポジトリ間差分の表示
$ git diff ○○○ #変更差分を確認 ○○○はオプションファイル名 ワークツリーとステージの差分(git addする前の変更分)
$ git diff --staged #変更差分を確認 ステージとリポジトリの差分(git addした後の変更分)
$ git log #変更履歴を確認する

補足オプション

  • git log
    --online:1行で表示する
    -p ファイル名:ファイルの変更差分を表示する
    -n <コミット数>:表示するコミット数を制限する

コマンドにエイリアスを付与する

$ git config --global alias.エイリアス名 コマンド名
# 例
$ git config --global alias.ci commit

git管理対象から特定ファイルを外す

プロジェクトフォルダ内に.gitignoreファイルを作成する。
そして、そのファイル内にgit管理から外したいファイル名を記載する。

.gitignore

# このように記載することにより、secret.txtファイルはgit管理されない
secret.txt