Blogに戻る

Git 実践ワークフロー

#Git #GitHub #開発ツール #バージョン管理 #作業効率化
作成日: 2024年2月12日
更新日: 2025年8月18日
import LinkCard from '@/components/LinkCard.astro';

推奨ツール

vibe coding + organic coding していて

ツール用途インストール
GitUITUI操作brew install gitui
delta差分表示brew install git-delta
czgコミット作成npm i -g czg
ccmanagerAIセッション管理npm i -g ccmanager
gitleaksセキュリティbrew install gitleaks
ghGitHub CLIbrew install gh
fzf高速選択brew install fzf
gibo.gitignore生成brew install gibo

日常開発フロー

ぼくのさいきょうの git コマンド集です。や〜シェルのエイリアスで設定してたんだけど思い出せなくなっちゃうので git で貼りました。amend とかを fixup に統合できたりしていい感じや〜🎵

VSCode とかの GUI に移動するのがめんどうな時は GitUI と czg でらくらく Conventional Commits できます。

# 基本操作
git pl                             # pull --ff-only
git ps                             # push
git sw main                        # switch
git st                             # status -sb
git lg                             # GitGraph
gitui                              # 差分確認・ステージング (VSCodeに移動したくない時)
czg                                # Conventional Commitsでコミット
 
# 機能開発
git sw -c feat/new-feature         # ブランチ作成
gitui && czg                       # コミット
git publish                        # push -u origin branch
gh browse                          # ブラウザでPR作成
gh pr checks --watch               # CI監視
 
# マージ作業
git pull --rebase origin main      # mainの最新を取得してリベース
git please                         # push --force-with-lease
gh pr view -w                      # 現在のPRをブラウザで開いてマージ
git sw main && git pl              # mainブランチに移動
git cleanup                        # マージ済みブランチ削除
 
# トラブル対処
git undo                           # コミット取り消し
git fixup                          # amend
git fixup HEAD~2                   # fixup して rebase --autosquash
 
# その他
gibo dump Node > .gitignore        # .gitignore生成
git search "login"                 # 検索してコンテキスト全体を表示(git-grep -W -n)
git gc --aggressive                # リポジトリ最適化

Claude Code (worktree 管理)

AIとの並行作業に最適化。worktreeで実験的な変更を隔離し、ccmanagerで複数のAIセッションを効率的に管理。メインの作業を邪魔せずに、AIに大胆な変更を試させることができる。

gitconfig

マージは常にfast-forwardのみ、強制プッシュはforce-with-leaseで安全に。deltaで美しい差分表示、rereでコンフリクト解決を記憶。余計な設定は排除し、本当に必要なものだけを厳選。

[user]
    name = anko9801
    email = 37263451+anko9801@users.noreply.github.com
    signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEpnmapaBsLWiMwmg201YFSh8J776ICJ8GnOEs5YmT/M
 
[core]
    editor = vim
    autocrlf = false
    safecrlf = true
    filemode = false
    pager = delta
    hooksPath = ~/.config/git/hooks
 
[color]
    ui = auto
 
[merge]
    tool = vimdiff
    conflictstyle = diff3
 
[diff]
    renames = true
 
[interactive]
    diffFilter = delta --color-only
 
[delta]
    navigate = true
    light = false
    side-by-side = true
    line-numbers = true
 
[pull]
    ff = only
 
[push]
    autoSetupRemote = true
    default = current
 
[fetch]
    prune = true
    fsckobjects = true
 
[rebase]
    autostash = true
    autosquash = true
 
[init]
    defaultBranch = main
 
[commit]
    verbose = true
    gpgsign = true
 
[tag]
    gpgsign = true
 
[gpg]
    format = ssh
 
[gpg "ssh"]
    program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign
    allowedSignersFile = ~/.config/git/allowed_signers
 
[help]
    autocorrect = prompt
 
[rerere]
    enabled = true
 
[branch]
    autosetupmerge = always
    autosetuprebase = always
 
[status]
    showUntrackedFiles = all
 
[transfer]
    fsckobjects = true
 
[receive]
    fsckObjects = true
 
[credential]
    helper = osxkeychain
 
[alias]
    st = status -sb
    co = checkout
    br = branch
    sw = switch
    re = restore
    
    # Commit operations
    c = commit
    cm = commit -m
    a = add --all
    amend = commit --amend --no-edit
    undo = reset HEAD~1 --mixed
    fixup = "!f() { git commit --fixup=amend:${1:-HEAD} && git rebase -i --autosquash ${1:-HEAD}^; }; f"
    
    # Push/Pull operations
    ps = push
    pl = pull
    f = fetch --prune
    please = push --force-with-lease
    
    # Log and history
    lg = log --oneline --graph --decorate
    la = log --oneline --graph --decorate --all
    last = log -1 HEAD
    contributors = shortlog -sn
    
    # Diff operations
    df = diff --color-words
    staged = diff --staged
    unstage = reset HEAD --
    
    # Branch management
    cleanup = !git branch --merged | grep -v "\\*\\|main\\|master\\|develop" | xargs -n 1 git branch -d
    publish = !git push -u origin $(git branch --show-current)
    
    # Search (git-grep)
    search = grep -W -n
    todo = grep -n "TODO\\|FIXME\\|XXX\\|HACK"