git基本コマンドまとめ
gitを使用するにあたってコマンドの意味を理解する事は必要不可欠ですが、
昨今はGUIで操作できる便利なgitツールがあるので基本的な事はマウスでできてしまいます。
でもツールに頼りすぎると、Linuxとかツールがない環境でやる時に困るので
基本的な操作はコマンドでもできるように覚えておきたいところです。
目次
ベアリポジトリ作成
Initialized empty Git repository in folderpath/bare.git
実行すると今いるフォルダがベアリポジトリになります。
ベアリポジトリは、ファイルの実体を持たない変更点の履歴のみが集約されるリポジトリで、
通例としてフォルダ名を<folder>.gitみたいにしておくとわかりやすくなります。
一般的にリモートリポジトリはこれで作ります。
ここにみんなでコミットをプッシュしあって共有します。
リポジトリ作成
Initialized empty Git repository in folderpath/.git/
こちらはノンベアリポジトリとも言い、ファイルと履歴を持つリポジトリです。
ローカルリポジトリはこれで作ります。
git設定
gitの設定は3段階に分かれており、「system -> global -> local」の順で設定は上書きされます。
主にgit全体の共通設定はglobalで、そのプロジェクトのみの設定をlocalに設定します。
systemはシステム全体(全ユーザ)の共通設定
globalは現在のユーザの共通設定
localは対象リポジトリのみの設定になっています。
公式ページを見るとオプションは数多くあるようです。
私は初期設定で下記のような設定をよく入れています。
git config –global core.autoCRLF false
・ファイル名の大小文字を差分として区別する
git config –global core.ignorecase false
設定ファイル自体をエディタで開く事ができます。
設定内容の確認
core.autocrlf=false
core.ignorecase=false
指定リポジトリからソース取得
Cloning into ‘bare.git’…
warning: You appear to have cloned an empty repository.
done.
URLを指定してその内容をローカルリポジトリとして作成します。
このURLがGitHubだったり、ベアリポジトリを作成した場所だったりになります。
ブランチリスト表示
* develop
master
現在チェックアウト中のブランチには*マークがついています。
指定したコミットが含まれるブランチリスト表示
* develop
このコミットはもうmasterに反映したか?とか知りたい時に
ファイル移動、リネーム
gitで管理しているファイルを移動したりリネームする時、
直接変更してしまうとgit上で行方不明になってしまいます。
git上から移動やリネームをする事で「変更1→変更2→リネーム→変更3」と、
リネームした事も管理されて履歴を繋げることができます。
変更点を表示
On branch master
Your branch is up to date with ‘origin/master’.
Changes to be committed:
(use “git reset HEAD
new file: piyo.txt
Untracked files:
(use “git add
fuga.txt
チェックアウト中のリポジトリからの変更ファイルリストやgit管理外のファイルが表示されます。
指定したファイル、ディレクトリをステージングさせる
変更点を記録する事がコミット
コミットするものを選択する事がステージングといったところだろうか
ステージング内容をコメントをつけてコミットする
ステージング内容を1つ前のコミットに追加する
1つ前のコミットはammendで何度も編集しなおす事ができます。
今回は記載していませんが、1つ以上前を編集したい時は
インタラクティブリベースというコマンドもあります。
コミット一覧の確認
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 | 全ブランチ情報表示 |
変更履歴の確認
03d8fh1 HEAD@{1}: commit: ファイルB修正
9008d5e HEAD@{2}: commit (amend): ファイルA修正
004b9f4 HEAD@{3}: commit: ファイルA修正
git logと違う点は、コミットではなく、今までの操作や変更の履歴を見ることができるという事です。
reflogを見るとコミットIDが表示されているのがわかると思います。
この事からコミットやブランチそのものを間違えて削除してしまったという場合にも、
reflogからチェックアウトする事で復元する事ができるという事です。
reflogはずっと保持されるわけではなくそのうち消えるので注意が必要です。
指定ファイルだけスタッシュ
一部だけスタッシュする方法はこちらでも紹介しています。
変更点の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} = {command}
# git ss = git status -s
ss = status -s
# git calcで電卓が起動する
calc = !calc
例として下記のようなエイリアスを登録してよく使用しています。
# エイリアス一覧表示
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系のコマンドを使えると対応がしやすくなります。