最頻出10項目
| やりたいこと | コマンド |
|---|---|
| 状態を確認 | git status |
| 差分を確認 | git diff |
| ステージ済み差分 | git diff --staged |
| 変更を選ぶ | git add <file> |
| コミット | git commit -m "message" |
| 履歴を確認 | git log --oneline --graph |
| ブランチ作成・移動 | git switch -c <branch> |
| ファイル変更を戻す | git restore <file> |
| リモート情報を取得 | git fetch |
| 共有する | git push |
迷ったら、最初に git status、コミット前に git diff と git diff --staged を確認します。
開始と基本の流れ
git clone <repository-url>
cd <repository>
git status
git add src/app.js
git diff --staged
git commit -m "Add input validation"
git push
新しいフォルダで履歴管理を始める場合は git init を使います。秘密鍵、APIキー、.env などの秘密情報はコミットせず、.gitignore と秘密情報管理の仕組みを使います。
状態と差分
| コマンド | 確認できること |
|---|---|
git diff | 未ステージの変更 |
git diff --staged | ステージ済みの変更 |
git show <commit> | コミット内容 |
git log --oneline --decorate --graph --all | ブランチを含む履歴 |
git add . は意図しないファイルも含める可能性があります。コミットを小さく保つには、ファイル名や git add -p で変更を選びます。
ブランチ
git branch
git switch -c feature/login
git switch main
git merge feature/login
git branch -d feature/login
git checkout は古くからある多目的コマンドで、次の操作もできます。
git checkout main
git checkout -b feature/login
git checkout -- src/app.js
それぞれ switch、switch -c、restore に対応します。checkout も有効ですが、初心者は役割が明確な新しいコマンドを第一候補にします。
リモートとの同期
git remote -v
git fetch origin
git log --oneline HEAD..origin/main
git pull --ff-only
git push -u origin feature/login
git fetch はリモートの情報を取得しますが、作業中のブランチは変更しません。git pull は取得後に統合も行います。履歴を意図せず作り替えたくない場合は、チームの方針に合わせて --ff-only や --rebase を選びます。
変更を戻す
未ステージのファイル変更を破棄します。
git restore src/app.js
ステージだけを取り消し、ファイルの変更は残します。
git restore --staged src/app.js
共有済みコミットを打ち消す新しいコミットを作ります。
git revert <commit>
restore で破棄した未コミット変更は、通常Gitから復元できません。実行前に git diff を確認してください。共有履歴の取り消しには、履歴を書き換えない git revert が基本です。
コンフリクト
git status
# ファイル内の競合部分を編集する
git add <resolved-file>
git commit
git merge --abort
git rebase --abort
競合マーカーを機械的に削除するだけでは不十分です。両方の変更意図を確認し、テストしてからコミットします。
危険な操作
次のコマンドは未コミット変更や履歴を失う可能性があります。
git reset --hard <commit>
git clean -nd
git clean -fd
git push --force-with-lease
reset --hardはインデックスと作業ツリーを指定コミットへ合わせます。clean -fdは未追跡ファイルとディレクトリを削除します。先にclean -ndで対象を表示します。- force pushはリモート履歴を書き換えます。必要性と対象ブランチをチームで確認します。
--force-with-lease も常に安全ではありません。保護ブランチではforce pushを避けます。