git で困った時によく使うコマンドの自分用備忘録(ローカルのみ)

普段は Visual Studio や VScode の GUI から git を使っていますが、(自分が知らないだけかもしれないけど、拡張機能なしだと)CUI でのコマンド入力が必要なケースがあります。

普段から CUI での操作をしておらずさらにそういったケースはたまにやってくる程度の頻度ということもあって、必要になった場面でコマンドを忘れていることが多いため自分用の備忘録としてまとめることにしました。

ここでの操作は全てローカルリポジトリのみを前提としています。

もくじ

  1. 情報表示
    1. 現在の状態を表示
    2. 履歴を確認
    3. 宙に浮いたコミットを含めた履歴を表示
  2. コミットなどの指定
    1. コミットの相対位置を指定
    2. 全てのファイルを指定
  3. ミスした時のリカバリ
    1. 変更したファイルを直近のコミット時点の状態に戻す
    2. コミットメッセージの変更
    3. タグを削除
    4. rebase -i について
    5. rebase の中止
    6. rebase 操作後の取消
    7. コミットの順番を入れ替え
    8. コミットを結合
    9. rebase -i のテキストエディタ編集時のコマンド
  4. 基本的な操作
    1. git 自体のバージョン
    2. リポジトリの作成
    3. ステージング
    4. コミット
    5. ブランチ
    6. ブランチの合流
    7. タグ

情報表示

あまりに基本的な操作ですが、基本すぎて普段は 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 変更範囲のひとつ前のコミットを指定

テキストエディタが開く
  1. メッセージを変更したいコミットの行頭にあるコマンドを r に変更
  2. 上書き保存して閉じる

テキストエディタが開く
  1. コミットメッセージを編集
  2. 上書き保存して閉じる

タグを削除

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 変更範囲のひとつ前のコミットを指定

テキストエディタが開く
  1. 行を入れ替え
  2. 上書き保存して閉じる

コミットを結合

git rebase -i 変更範囲のひとつ前のコミットを指定

テキストエディタが開く
  1. 結合したいコミットの行頭にあるコマンドを s に変更
    (s に変更したコミットはその前のコミットに結合されます)
  2. (必要に応じて順番の入れ替えも可能、行単位で入れ替え)
  3. 上書き保存して閉じる

コミットメッセージを変更しない場合は 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 ファイル名

自動的に設定されたブロック(hunk)単位でステージングの可否を指定
  • 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 タグ名

リンク

0 件のコメント:

コメントを投稿