acokikoy's notes

最近気になる=[NoCode, Shopify], I am..=[Python, ウクレレ, マニュアル車, CMS] LoveなWebディレクター

よく使うGitコマンドまとめ

Gitで、自分がよく使う(よく忘れる?!)操作の覚え書き。 内容は徐々に増やす予定。

Git自身のバージョンアップ(macOS + homebrew時)

macOS, homebrewで管理しているGitを最新版にする方法。

# ホントにhomebrewでインストールしたか確認
% brew list | grep git
git

# パッケージ情報取得(インストール可能な最新バージョンを知る)
% brew info git
git: stable 2.26.0 (bottled), HEAD
  ... 

# gitをバージョンアップ
% brew upgrade git

リポジトリ作成

# 新たにディレクトリを追加して、リポジトリ作成
% git init myproject
Initialized empty Git repository in .../myproject/.git/
  • パス無指定ならカレントディレクトリ配下に作られる。

ステージする

インデックス(ステージング・エリア)にファイルやディレクトリを登録する

基本

# 基本
$ git add {file(s)}
# git addされるファイルを一覧(実際にはステージされない)
% git add -n .
add 'hello.txt'
add 'hello2.txt'
add 'hello3.txt'
add 'subdir/hello.txt'
# git addして結果を一覧(ステージされる)
% git add -v .
add 'hello.txt'
add 'hello2.txt'
add 'hello3.txt'
add 'subdir/hello.txt'

なかったことにする1 - 指定ファイルをアンステージ

# hello.txtをアンステージ
% git restore --staged hello.txt 

# 同じことを git resetで。
% git reset hello.txt

なかったことにする2 - 作業ディレクトリに対して行った変更を元(=直近コミットの状態)に戻す

# (ステージ前の)hello.txt を編集前に戻す
 % git restore hello.txt

# 同じことをgit checkoutで (Git 2.23.0以前の方法)。
% git checkout -- hello.txt

ファイル移動・削除・名前変更 をステージする

# ファイル移動・ファイル名変更
 % git mv hello2.txt moved_hello2.txt

# 次と同等
% mv hello2.txt moved_hello2.txt
% git rm hello2.txt
% git add moved_hello2.txt
# ファイル削除をステージする
# 【注意!!】git rm はインデックスと作業ディレクトリの両方から取り除こうとする
% git rm hello2.txt
  • Git管理下にないファイルは git rm されない(普通のrmコマンドで消す)
# 作業ディレクトリ上のファイルがHEAD/インデックスと異なる(編集済みだった)なら
# gitに叱られて、うっかり削除防止のしくみがある
% git status
Changes not staged for commit:
    modified:   hello.txt

% git rm hello.txt
error: the following file has staged content different from both the
file and the HEAD:
    hello.txt
(use -f to force removal)

git diffを使うシーン

まだステージされていない内容を知る

# 作業ディレクトリと、ステージされたのを比較
% git diff hello.txt
# 作業ディレクトリと、HEAD(直近のコミット)を比較
% git diff HEAD hello.txt
  • HEADを{commit OID}に代えればそのコミットとの比較になる。

次回コミットされる内容を知る

# ステージされたのと、HEAD(直近のコミット)を比較 
% git diff --staged HEAD hello.txt
  • HEADは省略可だが、比較対象がわかんなくなっちゃうから明示しとく。
  • HEADを{commit OID}に代えればそのコミットとの比較になる。

diff:比較対象の整理

Git - git-diff Documentation

コマンド 作業dir index 任意ツリーobj.
git diff
git diff {commit} {commit}
git diff --staged {commit} {commit}

diff:オプション

# デフォルト unified diff形式 (パッチ生成)
% git diff 
diff --git a/hello.txt b/hello.txt
index 4872772..d43458c 100644
--- a/hello.txt
+++ b/hello.txt
@@ -1,2 +1,3 @@
 Hello World!
 Hello again!!
+Hello again and again!


# --stat 統計情報形式
% git diff --stat
 hello.txt | 1 +
 1 file changed, 1 insertion(+)