クリエイティブなWeb制作に
役立つ情報メディア

git基本コマンドまとめ

gitを使用するにあたってコマンドの意味を理解する事は必要不可欠ですが、
昨今はGUIで操作できる便利なgitツールがあるので基本的な事はマウスでできてしまいます。
でもツールに頼りすぎると、Linuxとかツールがない環境でやる時に困るので
基本的な操作はコマンドでもできるように覚えておきたいところです。

ベアリポジトリ作成

git init –bare

Initialized empty Git repository in folderpath/bare.git

実行すると今いるフォルダがベアリポジトリになります。
ベアリポジトリは、ファイルの実体を持たない変更点の履歴のみが集約されるリポジトリで、
通例としてフォルダ名を<folder>.gitみたいにしておくとわかりやすくなります。

一般的にリモートリポジトリはこれで作ります。
ここにみんなでコミットをプッシュしあって共有します。


リポジトリ作成

git init

Initialized empty Git repository in folderpath/.git/

こちらはノンベアリポジトリとも言い、ファイルと履歴を持つリポジトリです。
ローカルリポジトリはこれで作ります。


git設定

git config (–system or –global or –local) 設定値

gitの設定は3段階に分かれており、「system -> global -> local」の順で設定は上書きされます。
主にgit全体の共通設定はglobalで、そのプロジェクトのみの設定をlocalに設定します。
systemはシステム全体(全ユーザ)の共通設定
globalは現在のユーザの共通設定
localは対象リポジトリのみの設定になっています。

公式ページを見るとオプションは数多くあるようです。
私は初期設定で下記のような設定をよく入れています。

・チェックアウト時に改行コードを変更しない
git config –global core.autoCRLF false
・ファイル名の大小文字を差分として区別する
git config –global core.ignorecase false

設定ファイル自体をエディタで開く事ができます。

git config –edit (–system or –global or –local)

設定内容の確認

git config –list (–system or –global or –local)

core.autocrlf=false
core.ignorecase=false


指定リポジトリからソース取得

git clone <url>

Cloning into ‘bare.git’…
warning: You appear to have cloned an empty repository.
done.

URLを指定してその内容をローカルリポジトリとして作成します。
このURLがGitHubだったり、ベアリポジトリを作成した場所だったりになります。


ブランチリスト表示

git branch

* develop
 master

現在チェックアウト中のブランチには*マークがついています。


指定したコミットが含まれるブランチリスト表示

git branch –contains <sha>

* develop

このコミットはもうmasterに反映したか?とか知りたい時に


ファイル移動、リネーム

git mv filepath1 filepath2

gitで管理しているファイルを移動したりリネームする時、
直接変更してしまうとgit上で行方不明になってしまいます。
git上から移動やリネームをする事で「変更1→変更2→リネーム→変更3」と、
リネームした事も管理されて履歴を繋げることができます。


変更点を表示

git status

On branch master
Your branch is up to date with ‘origin/master’.

Changes to be committed:
(use “git reset HEAD …” to unstage)
new file: piyo.txt

Untracked files:
(use “git add …” to include in what will be committed)
fuga.txt

チェックアウト中のリポジトリからの変更ファイルリストやgit管理外のファイルが表示されます。


指定したファイル、ディレクトリをステージングさせる

git add <filepath>

変更点を記録する事がコミット
コミットするものを選択する事がステージングといったところだろうか


ステージング内容をコメントをつけてコミットする

git commit -m “コメント”

ステージング内容を1つ前のコミットに追加する

git commit –ammend

1つ前のコミットはammendで何度も編集しなおす事ができます。
今回は記載していませんが、1つ以上前を編集したい時は
インタラクティブリベースというコマンドもあります。


コミット一覧の確認

git log

commit 0e9ff9851956dd594ce4c95442cb798979e4624a (HEAD -> master, origin/master)
Author: name
Date: Fri Feb 15 10:00:00 2019 +0900
commit message

主要なオプションとして下記のようなものがあります。

–oneline 一行で表示(多少詳細情報が削られる)
–graph コミットログを線グラフで表示
–stat 変更ファイル、変更行数、変更量一覧
–numstat 変更ファイル、追加削除行数
–name-only ファイル名のみ表示
-<num> 表示数を数値指定(-nの省略形)
–author= コミット作成者でフィルタ
–grep= コミットログでフィルタ
–all 全ブランチ情報表示

変更履歴の確認

git reflog

03d8fh1 HEAD@{1}: commit: ファイルB修正
9008d5e HEAD@{2}: commit (amend): ファイルA修正
004b9f4 HEAD@{3}: commit: ファイルA修正

git logと違う点は、コミットではなく、今までの操作や変更の履歴を見ることができるという事です。
reflogを見るとコミットIDが表示されているのがわかると思います。
この事からコミットやブランチそのものを間違えて削除してしまったという場合にも、
reflogからチェックアウトする事で復元する事ができるという事です。
reflogはずっと保持されるわけではなくそのうち消えるので注意が必要です。


指定ファイルだけスタッシュ

git stash save -p “スタッシュ名”

一部だけスタッシュする方法はこちらでも紹介しています。

Stash this hunk [y,n,q,a,d,/,e,?]?
変更点のhunk単位でスタッシュするか指定していく

y – stage this hunk
n – do not stage this hunk
q – quit; do not stage this hunk nor any of the remaining ones
a – stage this hunk and all later hunks in the file
d – do not stage this hunk nor any of the later hunks in the file
g – select a hunk to go to
/ – search for a hunk matching the given regex
j – leave this hunk undecided, see next undecided hunk
J – leave this hunk undecided, see next hunk
k – leave this hunk undecided, see previous undecided hunk
K – leave this hunk undecided, see previous hunk
s – split the current hunk into smaller hunks
e – manually edit the current hunk
? – print help


エイリアス

簡単なコマンドなら手打ちでもいいですが、
様々なオプションをつけたコマンドとなると毎回打つのは面倒です。

configコマンドで[alias]のセクションに記述すると
エイリアスと言う自作のgitコマンドを登録することができます。

複雑なコマンドをよく使用するならエイリアスに登録しましょう。
長いコマンドも短く省略する事ができます。

configの欄でも紹介したように、どの設定に記述するかでコマンドの有効範囲が変わります。

git config –system –edit
git config –global –edit
git config –local –edit

適用したい範囲の設定ファイルに[alias]セクションを作成し、gitを抜いたコマンドを記述します。
コマンドの先頭に!をつけるとgit以外のコマンドも設定できます。

下記のように記述します。

[alias]
{alias} = {command}
# git ss = git status -s
ss = status -s
# git calcで電卓が起動する
calc = !calc

例として下記のようなエイリアスを登録してよく使用しています。

[alias]
# エイリアス一覧表示
alias = config –get-regexp alias.
# コミットログをグラフで表示
gls = log –stat –graph –oneline –decorate -n 10 ‘–pretty=format:%C(red)%d%n%C(green)[%ci] %C(yellow)%m [%h] %C(reset)%s %C(cyan)[%an]’
# コミットログの詳細一覧を表示
cls = log –oneline –decorate -n 10 ‘–pretty=format:%C(green)[%ci] %C(yellow)%m [%h] %C(reset)%s %C(cyan)[%an] %C(red)%d’

最後に

けっこう飛び飛びにコマンド書いてしまいましたが、
オプションや状況も考えると一概に書くのも難しいですね・・・
昨今は便利なgitツールもあるので、initやcommitみたいなコマンドは
ツール通して行った方が簡単ではありますが、
git上からリリースを行う時などコマンドオンリーな場面も出てくるので
checkoutやlog系のコマンドを使えると対応がしやすくなります。

by