🍑

Git入門コマンドライン演習80の備忘録

2022/07/25に公開

はじめに

Git入門コマンドライン演習80の備忘録

https://www.amazon.co.jp/gp/product/4798066338

チェックアウトコマンド

Gitバージョン2.23.0からswitchコマンドが加わってブランチを切り替えられるようになった
従来のcheckoutコマンドは非常に多くの役割を持っていたためが理由
checkoutコマンドでも切り替えられるのは変わらず

git checkout <ブランチ名>
git switch <ブランチ名>

ステージング前の操作の取り消し

チェックアウトと同じ理由でrestoreコマンドが追加された

git checkout .
git restore .

差分の確認

コミットログ

1行で見るケースが多いの覚えておくのが良い

git log --oneline

コミットメッセージの修正

頻度としてはたまにやるぐらい

git commit --amend -m "hoge"

ファイルを以前の状態に戻すreset

コミットの中身の確認

git show --oneline <コミット>

fetchとpull

fetchコマンドはリモートブランチの情報を取得するだけ
pullはfetch&mergeの2段階の処理

rebase

rebaseは枝の付け替えと考えると分かりやすい
連続してcherry-pickをやっているイメージ

rebaseはコミットをまとめるのに使える(よく使う)
インタラクティブモードになるので、まとめたいコミットをsquashする

# 直前の3つのコミットをまとめる
git rebase -i HEAD^3

.gitignore

hoge.aとhoge.bを無視したい場合

hoge.[ab]

既に追跡しているファイルを後からgitignoreに追加した場合gitにファイルは残り続けているので以下のコマンドでgitからの追跡を止める

git rm --cached <フィアル名>

ローカルでのみ変更を無視する

追跡しているファイルを一時的にローカルだけで変更を加えたい場合に使う

# ローカルで変更したファイルをgitで追跡しない
git update-index --skip-worktree <ファイル名>

# ローカルで変更したファイルをgitで追跡しないをキャンセルする
git update-index --no-skip-worktree <ファイル名>

HEADについて

HEADとはいまいるブランチを参照するもの。
HEADにも種類があって

  • HEAD
  • FETCH_HEAD
  • ORIG_HEAD
  • MERGE_HEAD
    がある
    HEADの情報は.gitディレクトリに保存されている
    HEADのエイリアスとして@が利用できる

Gitオブジェクト

  • Blobオブジェクト
    • ステージング時
    • ファイル情報を指したもの
  • Treeオブジェクト
    • コミット時
    • BlobオブジェクトやTreeオブジェクトを指したもの
  • Commitオブジェクト
    • コミット時
    • Treeオブジェクトを指したもので、加えて前のCommitオブジェクトを指している
  • Tagオブジェクト
    • タグ時
    • Commitオブジェクトを指している

git-flow

Gitは便利だけどチームで使い方のルールを決めておかないとスムーズな開発はできない
そこで提唱されているフローの1つ
feature, develop, release, hotfix, main
とブランチにそれぞれ役割をもたせて運用する

GitHub Flowはmainブランチをベースとしたフロー

merge

分岐がある場合とない場合でマージのされかたが異なるのそこを理解しておく

Discussion