よく使う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:比較対象の整理
コマンド | 作業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(+)