Gitコマンドについてまとめてみました

Gitはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムの一つです。多数のコマンドが用意されていますが、実際に使用するコマンドは限られています。ここでは、Gitコマンドについて解説していきます。

初期設定

bash


# グローバル設定
$ git config --global user.name "geisterhacker"
$ git config --global user.email "geisterhacker@example.com"
$ git config --global --list

# 個別設定
$ git config user.name "geisterhacker2"
$ git config user.email "geisterhacker2@example.com"
$ git config --list

リモートリポジトリ作成

bash


# git remote add <リポジトリの別名> <リンク先>
# <リポジトリの別名>が指している場所は「git config --list」で確認できる。
# master: ブランチ名
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/example/project.git
$ git push origin master

任意のブランチに含まれているファイルの中身を閲覧

bash


# git cat-file -p ブランチ名:ファイルパス名
$ git cat-file -p HEAD:SW01AB-UITableViewSlide/ViewController.swift

ベアリポジトリ内のファイル一覧を閲覧

bash


# ls-tree: リポジトリ内の全ディレクトリを表示
$ git ls-tree --full-tree -r HEAD

ベアリポジトリ内でgrep

bash


# -H: ファイル名を相対パスで表示
# --heading: 正規表現
# --break: 正規表現
# --line-number: 正規表現
# -e: 正規表現
$ git grep -H --heading --break --line-number -e "addSubview" HEAD

変更点をコミット

bash


# 変更したファイルをインデックスに追加
$ git add <変更したファイル>

# 変更した全てのファイルをインデックスに追加
$ git add --all

# 1行コメント
$ git commit -m "initial commit"

# 複数行のコメント
$ git commit -m "コメント1行目" -m "コメント2行目" -m "コメント3行目…"

ユーザ情報を確認

bash


$ git config --global --list

リモートリポジトリの変更(origin)

bash


$ git remote set-url origin git@git.example.com:foo/bar.git

リモートリポジトリの確認

bash


$ git remote -v

コミット履歴の閲覧

bash


$ git log

最新のコミットメッセージを修正

起動したviエディタを使って修正する。(未だにviエディタの使い方がよく分かってないのは秘密。。。)

bash


$ git commit --amend
$ git push -f origin master

リモートリポジトリを現在のローカルリポジトリと強制的に同期

bash


$ git push -f origin master

ファイル名変更、削除

bash


# ファイル名変更
$ git mv <現在のファイル名> <新しいファイル名>

# ファイル削除
$ git rm <ファイル名>

# ディレクトリごと削除
$ git rm -r <ディレクトリ名>

コミットのロールバック

bash


$ git reset --hard <ハッシュ値>

コミットしたファイルを表示

bash


$ git log --name-status

管理対象のファイルを表示

bash


$ git ls-files

addしたファイルの取り消し

bash


$ git reset HEAD <ファイル名>

リポジトリのクローン

bash


$ git clone git@git.example.com:foo/bar.git

リモートリポジトリと同期

bash


$ git pull origin master

管理対象外のファイル/ディレクトリを設定

bash


# .gitignoreファイルに記述
$ nano .gitignore

## 既に管理済みのファイルを対象外に設定
# .gitignoreの編集
$ nano .gitignore
node_modules
/path/to/hoge.txt # 追加

# 管理対象から除外(一部)
$ git rm --cached /path/to/hoge.txt
$ git add .gitignore

# 管理対象から除外(全て)
$ git rm -r --cached .
$ git add .

# コミット/プッシュ
$ git commit -m "Modify .gitignore"
$ git push origin master

.gitignore


node_modules

特定のコミットコメントを修正

bash


# 修正対象行に記載されている「pick」を「rewordまたはr」に変更して保存した後、コメントを修正する。
$ git rebase -i HEAD~<戻したいコミット数+1>

# 初回コミットを修正する場合
$ git rebase -i --root

# ローカルで修正したコミットメッセージをリモートへ反映
$ git push -f origin master

BEFORE:


pick b4648b3 Add Gemfile Add SW0201Houston.p12 Add publish.rb Add push_development.pem
pick b311108 Modify publish.rb

# Rebase b311108 onto e1a3281
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

AFTER:


r b4648b3 Add Gemfile Add SW0201Houston.p12 Add publish.rb Add push_development.pem
pick b311108 Modify publish.rb

# Rebase b311108 onto e1a3281
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

Gitでのリポジトリ管理を破棄

bash


$ rm -rf .git