Git 覚書(ローカルで自分のためだけのリポジトリを作る)

Git、触ってないとすっかり忘れてしまうこともありまして、忘れっぷりにビビったのでメモっておきます。

GitHubからcloneしてきて不特定大多数もしくは複数人チームでソースを共有する、という場合ではなく、ローカルPCで自分用にソース管理する、という前提。

プロジェクトを開始する

1,管理したい任意のディレクトリの1階層上で「Git Bash Here」をクリック
2,git init
3,コンフィグを確認(git config -l)

→ 「user.name」と「user.email」が入っているかを確認
→ 無ければ追加する
→ リスト表示は「q」でquit出来る

※user.emailとuser.nameはPCローカルの.gitconfigに記述される

4,エイリアスを追加する

追加するのはプロジェクトの/.git/config でもいいしルートの.gitconfigでもいい。
だいたいいつもこんな感じ。

[Alias]
	s = status
	f = fetch
	aa = !git add . && git status

	# 今いるブランチ名のみ表示
	b = symbolic-ref --short HEAD

	# リモートトラッキングブランチも含めてブランチをすべて表示
	br = branch -a

	# checkout
	co = checkout

	# 1つ前のコミットに追加する
	join = commit --amend --no-edit

	# 未ステージングと最新コミットの差分
	d = diff --word-diff

	# 最新コミットと1つ前のコミットとの差分
	dd = diff --word-diff HEAD^

	# ステージング済のものと最新コミットの差分
	dic = diff --cached --word-diff

	# origin/masterと自分の差分ファイルを確認する
	gap = !git fetch && git diff --compact-summary origin/master @{0}

	# origin/masterと自分の差分ファイルを確認する
	gaps = diff --word-diff origin/master @{0}

	# 共有リポジトリ(親)と自分の差分ファイルを確認する
	dry = !git fetch && git diff --compact-summary @{0} @{u}

	# 共有リポジトリ(親)と自分の差分ファイルを確認する
	drys = diff --word-diff @{0} @{u}

	# デプロイ時のmerge は --no-ff
	mg = merge --no-ff --no-commit

	# 特定のファイルをアンステージする
	uns = rm --cached

	# ステージングをすべて未ステージングに
	unstage = reset HEAD

	# 後ろに指定したファイルの編集をなかったことにする
	discard = checkout --

	#すべての編集をなかったことにする(ステージングされているものはそのまま)
	disall = checkout -- .

	# pushしていないコミットをまとめる
	wad = reset --soft @{u}

	# 1つ前のログの状態に戻る
	back = reset --soft HEAD^

	# 最新コミットで強制上書きする(最新コミットの状態に戻す)
	clear = reset --hard HEAD

	# 現在のブランチをログを含めて共有リポジトリですべて強制上書きする
	# (未pushのローカルコミットはなかったことに)
	refresh = !git fetch && git reset --hard @{u} && git gc

	# 後ろに指定したファイルのログ(差分)を表示
	fdiff = log --word-diff -p

	# 後ろに指定したファイルの行ごとの最終ハッシュとコミッターを表示(行選択して「,」で遡れる.qで戻る)
	line = !tig blame -M

	# 最新コミットの編集ファイル一覧
	clist = diff --name-status HEAD^

	# 現在地のハッシュ(短縮版)
	hash = rev-parse --short HEAD

	# 現在地のハッシュ(ロング版)
	last = log -1 HEAD --format=format:'%C(yellow bold)%H'

	# 最新のログ20件を見やすく
	ll = log --graph --oneline --decorate=short --date=format:'%Y-%m-%d %H:%M:%S' -20 --format=format:'%C(yellow)%h%C(reset) %C(green)[%ad]%C(reset) %s %C(cyan) %an%C(reset) %C(auto)%d%C(reset)'

	# 最新のログ20件を、リモートトラッキングブランチを含むすべてのブランチで表示
	lla = log --graph --oneline --decorate=short --all --date=format:'%Y-%m-%d %H:%M:%S' -20 --format=format:'%C(yellow)%h%C(reset) %C(green)[%ad]%C(reset) %s %C(cyan) %an%C(reset) %C(auto)%d%C(reset)'

	# 今いるディレクトリのファイルが最後に更新されたのはいつか の一覧
	files = !cd ${GIT_PREFIX:-.} && git ls-tree -z --name-only HEAD xargs -0 -n1 -I@ -- git log -1 --pretty=format:'%C(green)%ai%Creset %C(yellow)%h%Creset @ %C(cyan)(%ar)%Creset %C(red)<%an>%Creset' -- @
5,ホワイトリストを書く

→ .gitignoreを作成。
→ たぶん画像は毎回ハズすのでこんな感じ

*.jpg
*.png
*.jpeg
*.gif
*.svg
6,ホワイトリストだけコミットする

最初にファイルコミットしないこと。

  git add .gitignore
  git status
  git commit -m "First commit"
  git log

※最初にファイルコミットしないのは、「最初のコミット」はツリーをいじれない(いじりづらい)ため。

7,すべてコミットする
  git add .
  git status (gitignoreが活きているかを確認する)
  git commit -m "全部コミット"