よく使う Git コマンド#
Git 概要#
- Git はオープンソースの分散型バージョン管理システムで、小規模から大規模まで、あらゆるプロジェクトを高速かつ効率よく扱うために使われます。
- Git は Linus Torvalds が Linux カーネル開発を管理するために開発した、オープンソースのバージョン管理ソフトウェアです。
- Git は CVS、Subversion などの一般的なバージョン管理ツールと異なり、分散型リポジトリ方式を採用しており、サーバー側ソフトウェアに依存しなくても利用できます。
Git と SVN の違い#
Git は単なるバージョン管理システムではなく、コンテンツ管理システム(CMS)や作業管理システムとしての側面もあります。 SVN を使ってきた経験がある場合、Git が提供する概念や特徴に慣れるには、ある程度考え方を切り替える必要があります。
Git と SVN の主な違い:
- Git は分散型で、SVN は分散型ではない。これは Git と SVN、CVS などの非分散型バージョン管理システムとの最も根本的な違いです。
- Git は内容をメタデータ方式で保存し、SVN はファイル単位で保存します。多くのバージョン管理システムは、
.svnや.cvsのようなフォルダにファイルのメタ情報を隠します。 - Git のブランチと SVN のブランチは異なります。SVN のブランチは特別なものではなく、リポジトリ内の別ディレクトリに近いものです。
- Git にはグローバルなリビジョン番号がありませんが、SVN にはあります。これは SVN と比べた時に Git にない大きな特徴です。
- Git の内容完全性は SVN より優れています。Git は SHA-1 ハッシュアルゴリズムで内容を保存するため、コード内容の完全性を保証し、ディスク障害やネットワーク問題によるリポジトリ破損を減らせます。
Git はよく使いますが、多くのコマンドはなかなか覚えられません。日常利用なら下図の7つのコマンドを覚えれば十分です。ただ、熟練するには40〜60個ほど覚える必要があるため、よく使う Git コマンド一覧を整理しました。

- Workspace:作業ツリー
- Index / Stage:ステージングエリア
- Repository:リポジトリ領域(またはローカルリポジトリ)
- Remote:リモートリポジトリ
ユーザー名とメールアドレスの設定#
$ git --version # git のバージョン情報を確認
$ git config --global user.name # 現在ログインしているユーザーを取得
$ git config --global user.email # 現在ログインしているユーザーのメールを取得Git にログインする設定:
# ユーザー設定が取得できない場合、コードの pull はできても変更はできない。git を使うには、誰が使っているのか git に伝える必要がある
$ git config --global user.name 'userName' # git アカウントを設定。userName は git アカウント名
$ git config --global user.email 'email'
# Git 設定情報を取得するには、以下を実行
$ git config –listhttps / ssh push 時にユーザー名とパスワードを保存する設定#
# https 提交時にユーザー名とパスワードを保存
$ git config --global credential.helper store
# 公開鍵と秘密鍵を生成し、公開鍵を GitHub に設定すれば、ssh 提交時にユーザー名とパスワード入力を省略できる
# Enter を3回押せば ssh key を生成できる
$ ssh-keygen -t rsa
# 生成済み公開鍵を確認
$ cat ~/.ssh/id_rsa.pubリモートリポジトリへ push する正しい流れ#
1. git init # リポジトリを初期化
2. git add .(文件name) # ファイルをローカルリポジトリへ追加
3. git commit -m "first commit" # ファイル説明情報を追加
4. git remote add origin 远程仓库地址 # リモートリポジトリを接続し、メインブランチを作成
5. git pull origin master --allow-unrelated-histories # ローカルリポジトリの変更をリモートの master ブランチと接続
6. git push -u origin master # ローカルリポジトリのファイルをリモートへ push一、ローカルリポジトリの新規作成#
# フォルダを作成
$ mkdir GitRepositories # GitRepositories フォルダを作成
$ cd GitRepositories # GitRepositories ディレクトリへ移動
# 現在のディレクトリに Git コードリポジトリを新規作成
$ git init
# 新しいディレクトリを作り、Git コードリポジトリとして初期化
$ git init [project-name]
# プロジェクトとその全コード履歴をダウンロード
$ git clone [url]二、設定(グローバルとプロジェクト)#
# Git の設定ファイルは .gitconfig。ユーザーホーム(グローバル設定)またはプロジェクトディレクトリ(プロジェクト設定)に置ける
# 現在の Git 設定を表示
$ git config --list
# Git 設定ファイルを編集
$ git config -e [--global]
# コード提出時のユーザー情報を設定
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"三、ファイルの追加 / 削除#
# 指定ファイルをステージングエリアへ追加
$ git add [file1][file2] ...
# 指定ディレクトリをステージングエリアへ追加。サブディレクトリも含む
$ git add [dir]
# 現在のディレクトリ内の全ファイルをステージングエリアへ追加
$ git add .
# 各変更の前に確認を求める
# 同じファイル内の複数変更を分けてコミットできる
$ git add -p
# 作業ツリーのファイルを削除し、この削除をステージングエリアへ入れる
$ git rm [file1] [file2] ...
# 指定ファイルの追跡を停止。ただしファイルは作業ツリーに残る
$ git rm --cached [file]
# ファイル名を変更し、この変更をステージングエリアへ入れる
$ git mv [file-original] [file-renamed]四、コードコミット#
# ステージングエリアをリポジトリへコミット
$ git commit -m [message]
# ステージングエリアの指定ファイルをリポジトリへコミット
$ git commit [file1] [file2] ... -m [message]
# 前回 commit 以降の作業ツリー変更を直接リポジトリへコミット
$ git commit -a
# コミット時にすべての diff 情報を表示
$ git commit -v
# 新しい commit で前回のコミットを置き換える
# コードに新しい変更がない場合、前回 commit のメッセージを書き換えるために使う
$ git commit --amend -m [message]
# 前回 commit をやり直し、指定ファイルの新しい変更も含める
$ git commit --amend [file1] [file2] ...五、ブランチ#
# すべてのローカルブランチを一覧表示
$ git branch
# すべてのリモートブランチを一覧表示
$ git branch -r
# ローカルブランチとリモートブランチをすべて一覧表示
$ git branch -a
# 新しいブランチを作成。ただし現在のブランチに留まる
$ git branch [branch-name]
# 新しいブランチを作成し、そのブランチへ切り替える
$ git checkout -b [branch]
# 指定 commit を指す新しいブランチを作成
$ git branch [branch] [commit]
# 指定リモートブランチとの追跡関係を持つ新しいブランチを作成
$ git branch --track [branch] [remote-branch]
# 指定ブランチへ切り替え、作業ツリーを更新
$ git checkout [branch-name]
# 一つ前のブランチへ切り替え
$ git checkout -
# 既存ブランチと指定リモートブランチの間に追跡関係を作成
$ git branch --set-upstream [branch] [remote-branch]
# 指定ブランチを現在のブランチへマージ
$ git merge [branch]
# 一つの commit を選んで現在のブランチへ取り込む
$ git cherry-pick [commit]
# ブランチを削除
$ git branch -d [branch-name]
# リモートブランチを削除
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]六、タグ#
# すべての tag を一覧表示
$ git tag
# 現在の commit に tag を新規作成
$ git tag [tag]
# 指定 commit に tag を新規作成
$ git tag [tag] [commit]
# ローカル tag を削除
$ git tag -d [tag]
# リモート tag を削除
$ git push origin :refs/tags/[tagName]
# tag 情報を確認
$ git show [tag]
# 指定 tag を push
$ git push [remote] [tag]
# すべての tag を push
$ git push [remote] --tags
# ある tag を指す新しいブランチを作成
$ git checkout -b [branch] [tag]七、情報確認#
# ディレクトリを確認
$ ls -al または $ ll
# リポジトリ状態を確認し、変更されたファイルを表示
$ git status
# 現在のブランチの履歴を表示
$ git log
# commit 履歴と、各 commit で変更されたファイルを表示
$ git log --stat
# キーワードでコミット履歴を検索
$ git log -S [keyword]
# ある commit 以降のすべての変更を表示。各 commit を一行で表示
$ git log [tag] HEAD --pretty=format:%s
# ある commit 以降のすべての変更を表示し、その「コミット説明」が検索条件に一致するものだけを表示
$ git log [tag] HEAD --grep feature
# 指定ファイルの履歴を表示。ファイル名変更も含む
$ git log --follow [file]
$ git whatchanged [file]
# 指定ファイルに関する各 diff を表示
$ git log -p [file]
# 過去5回の commit を表示
$ git log -5 --pretty --oneline
# commit した全ユーザーを、commit 数順に表示
$ git shortlog -sn
# 指定ファイルが誰にいつ変更されたか表示
$ git blame [file]
# ステージングエリアと作業ツリーの差分を表示
$ git diff
# ステージングエリアと前回 commit の差分を表示
$ git diff --cached [file]
# 作業ツリーと現在ブランチ最新 commit の差分を表示
$ git diff HEAD
# 二つの commit 間の差分を表示
$ git diff [first-branch]...[second-branch]
# 今日自分が何行コードを書いたか表示
$ git diff --shortstat "@{0 day ago}"
# ある commit のメタデータと内容変更を表示
$ git show [commit]
# ある commit で変更されたファイルを表示
$ git show --name-only [commit]
# ある commit 時点での指定ファイル内容を表示
$ git show [commit]:[filename]
# 現在ブランチの直近の commit を表示
$ git reflog八、リモート同期#
# リモートリポジトリのすべての変更をダウンロード
$ git fetch [remote]
# すべてのリモートリポジトリを表示
$ git remote -v
# 指定リモートリポジトリの情報を表示
$ git remote show [remote]
# 新しいリモートリポジトリを追加し、名前を付ける
$ git remote add [shortname] [url]
# リモートリポジトリの変更を取得し、ローカルブランチとマージ
$ git pull [remote] [branch]
# ローカルの指定ブランチをリモートへアップロード
$ git push [remote] [branch]
# コンフリクトがあっても現在ブランチを強制 push
$ git push [remote] --force
# すべてのブランチをリモートへ push
$ git push [remote] --all九、取り消し#
# ステージングエリアの指定ファイルを作業ツリーへ戻す
$ git checkout [file]
# ある commit の指定ファイルをステージングエリアと作業ツリーへ戻す
$ git checkout [commit] [file]
# ステージングエリアの全ファイルを作業ツリーへ戻す
$ git checkout .
# ステージングエリアの指定ファイルを前回 commit と一致するようにリセット。ただし作業ツリーは変えない
$ git reset [file]
# ステージングエリアと作業ツリーを前回 commit と一致するようにリセット
$ git reset --hard
# 現在ブランチのポインタを指定 commit へリセットし、ステージングエリアもリセット。ただし作業ツリーは変えない
$ git reset [commit]
# 現在ブランチの HEAD を指定 commit へリセットし、ステージングエリアと作業ツリーも指定 commit と一致させる
$ git reset --hard [commit]
# 現在 HEAD を指定 commit へリセット。ただしステージングエリアと作業ツリーは保持
$ git reset --keep [commit]
# 指定 commit を取り消すための新しい commit を作成
# 後者のすべての変更は前者で相殺され、現在ブランチへ適用される
$ git revert [commit]
# 未コミット変更を一時的に退避し、あとで戻す
$ git stash
$ git stash pop十、その他#
# 現在ディレクトリの全ファイルからテキストを検索
$ git grep "Hello"
# あるバージョン内でテキストを検索
$ git grep "Hello" v2.5
# 配布可能な圧縮アーカイブを生成
$ git archive付録:Git よく使うコマンド早見表#

付録:Git 指令早見表#


付録:資料リンク#
Git 常用命令总结 Git常用命令,很全很详细讲解的也不错 Git详细使用教程 Git使用详细教程 Git 安装和使用教程 Git 教程


