普段は Visual Studio や VScode の GUI から git を使っていますが、(自分が知らないだけかもしれないけど、拡張機能なしだと)CUI でのコマンド入力が必要なケースがあります。
普段から CUI での操作をしておらずさらにそういったケースはたまにやってくる程度の頻度ということもあって、必要になった場面でコマンドを忘れていることが多いため自分用の備忘録としてまとめることにしました。
ここでの操作は全てローカルリポジトリのみを前提としています。
もくじ
情報表示
あまりに基本的な操作ですが、基本すぎて普段は GUI 操作だけで十分なためいつになってもコマンドが覚えられないので明示しておきます。
現在の状態を表示
基本
git status
短縮表示
git status -s
- A : 新規ファイル
- M : 変更があったファイル
- D : 削除したファイル
- R : 名前を変更したファイル
- C : コピーしたファイル
- U : マージしていないファイル
(コンフリクト発生時に表示) - ? : git 管理外のファイル
- ! : 無視するファイル
記号の表示位置
- *_ : ステージング済み
- _* : ステージング前
履歴を確認
git log
q キーで閲覧を終了
オプション
-数値
表示数を指定
--oneline
一行表示
--graph
コミットのつながりをグラフで表示
宙に浮いたコミットを含めた履歴を表示
git reflog
HEAD の変遷を表示してくれます。reset や rebase などによって log では表示されなくなって宙に浮いたコミットも表示することができます。
コミットなどの指定
任意のコミットからの相対位置で指定する方法です。ここではコミットとしていますが、HEAD や main やタグ名なども使えます。
コミットの相対位置を指定
そのコミットの 1 つ前のコミット
コミット^
^ の数だけ遡れます。例えば コミット^^^ なら 3 つ前
そのコミットの n 個前のコミット
コミット~n
全てのファイルを指定
コマンド .
コマンドとの間に半角スペース
カレントディレクトリ以下の全てのファイルが対象
ミスした時のリカバリ
この記事の本題的な部分です。
変更したファイルを直近のコミット時点の状態に戻す
git checkout ファイル名
or
git restore ファイル名
ファイルの変更を取り消してコミット時点の状態に戻したい場合に、Visual Studio 内の操作では変更が取り消せないことがありました。そんな場合に、コンソールからコマンドを打つことで解消できます。
restore は git 2.23 にて追加されたコマンド
コミットメッセージの変更
直近
git commit --amend -m "新しいメッセージ"
直近のコミットに対しての場合はエディタの GUI からの操作でも可能
それより前のコミット
git rebase -i 変更範囲のひとつ前のコミットを指定
- メッセージを変更したいコミットの行頭にあるコマンドを r に変更
- 上書き保存して閉じる
テキストエディタが開く
- コミットメッセージを編集
- 上書き保存して閉じる
タグを削除
git tag -d タグ名
rebase -i について
git rebase -i はコマンドで指定したコミットに新たな分岐を作成しているぽい処理が行われます。
新たな分岐のほうに順番を並び替えたり結合したコミットが作られ、分岐点以降に元々あったコミットは log には表示されなくなります。
この処理と関連した実体験で、rebase する前のコミットにタグをつけていた場合、rebase 後に分岐で作られたコミットにはタグが付いておらず、しかしそのタグはこのリポジトリの中で使用済みの状態になっているということがありました。
rebase の中止
git rebase --abort
指定するコミットを間違えてやり直したい時などに
rebase 操作後の取消
rebase 直後の場合
git reset --hard ORIG_HEAD
それ以降の場合
git reflog で履歴を確認
git reset --hard HEAD@{n}
コミットの順番を入れ替え
git rebase -i 変更範囲のひとつ前のコミットを指定
- 行を入れ替え
- 上書き保存して閉じる
コミットを結合
git rebase -i 変更範囲のひとつ前のコミットを指定
- 結合したいコミットの行頭にあるコマンドを s に変更
(s に変更したコミットはその前のコミットに結合されます) - (必要に応じて順番の入れ替えも可能、行単位で入れ替え)
- 上書き保存して閉じる
コミットメッセージを変更しない場合は s ではなく f にする
f のコミットではなくそのコミットを結合されるほうのメッセージが残る
rebase -i のテキストエディタ編集時のコマンド
p,pick
コミットを使うr,reword
コミットを使用し、コミットメッセージを編集s,squash
前のコミットに結合し、コミットメッセージを編集f,fixup
前のコミットに結合し、コミットメッセージは結合される側が残るd,drop
コミットを削除する
基本的な操作
あまりに基本的な操作であり、普段は GUI で問題なく操作できる範囲なのでコマンドが覚えられず、いざ CUI 操作が必要になった場面では CUI と GUI を行き来するよりは全て CUI で完結したほうが効率が良いので、明示しておきます。
git 自体のバージョン
git のバージョンを表示
git --version
git の更新
git update-git-for-windows
Windows 環境の場合
リポジトリの作成
git init
ステージング
全てのファイルを対象
git add -A
リポジトリ内の全てのファイルが対象
git add .
カレントディレクトリ以下の全てのファイルが対象
ファイルを指定
git add ファイル名
ファイル内の一部をステージング
git add -p ファイル名
- y : そのブロックをステージング
- n : そのブロックはステージングしない
- q : それ以降のブロックは全てステージングしない
- a : それ以降のブロックは全てステージング
- e : テキストエディタを使って行単位で指定
ファイル内の一部のステージングは GUI でもできるけど、CUI で操作したほうが早いかもしれない
ステージングを取消
git reset
コミット
git commit -m "メッセージ"
ブランチ
switch は git 2.23 にて追加されたコマンド
ブランチの一覧を表示
git branch
ブランチを作成して移動
git checkout -b ブランチ名
or
git switch -c ブランチ名
ブランチの移動
git checkout ブランチ名
or
git switch ブランチ名
ブランチの合流
マージ
git merge ブランチ名
指定したブランチを HEAD に合流
ブランチ名ではなくてコミットを指定することも可能
マージの中止
git merge --abort
コンフリクト発生時に、マージ実行前の状態に戻す
リベース
git rebase ブランチ名
HEAD のブランチでのコミットを指定したブランチにコピー
HEAD もそのブランチも、コピー後のコミットに移動
指定したブランチが指し示すコミットは元のまま
タグ
現在の HEAD に対してタグを作成
git tag タグ名
任意のコミットにタグを作成
git tag タグ名 コミットを指定
タグを削除
git tag -d タグ名
リンク
-
【図解解説】これ1本でGitをマスターできるチュートリアル!【完全版】
私はこれを見て git の基礎を学びました。 -
Learn Git Branching
git のツリーに関する操作を中心に、実際にコマンド入力しながら git の基礎を学べるサイト。
ここでのツリーの変化を見ることで、rebase はあくまで新たな分岐を作ってそこにコミットのコピーのようなものを作っている、ということが視覚的に分かるかと思います。
-
Reference
公式ドキュメント。 -
Git コマンドリファレンス(日本語版)
公式ドキュメントの日本語訳。
0 件のコメント:
コメントを投稿