現場でよく利用するgitコマンドをまとめました。
git環境を新規に構築する手順
gitの環境を新規に構築する場合、主に2つのケースが考えられます。
- 自分のローカル環境を、新たにgitで管理する。
- git initコマンドを使用
- githubなどのリモートリポジトリをコピーし、git環境を構築する。
- git cloneコマンドを使用
参考サイト:Start a new git repository
自分の環境を、新たにgitで管理する: git init
新たにgitで管理するためには、git initコマンドを使用します。このコマンドを実行すると、".git"ファイルが作成され、gitで管理できるようになります。
既存のプロジェクト(ディレクトリやファイル群)があり、それを新たにgitで管理したい場合も同様にgit initコマンドを使用します。
# gitで管理するディレクトリ(例:new_project)を作成する。
# 既存のプロジェクトを管理する場合は、そのディレクトリへ移動する。
mkdir new_project
cd new_project
# gitリポジトリを作成する
git init
# .gitファイルが作成されているか確認
ls -l
ls -a コマンドを実行すると、.gitファイルが作成されていることが確認できます。これでローカルリポジトリが作成され、gitで管理されるようになりました。
githubと接続する: git remote add
リモートリポジトリは他人と一緒に開発するなど、複数のローカルリポジトリの作業を統合するのに便利です。
リモートリポジトリはgithubのページから作成できます。
# リモートリポジトリを登録
# username, new_repoは自分のリモートリポジトリの名称に変更する
$ git remote add origin git@github.com:username/new_repo
# リモートリポジトリにローカルリポジトリの内容を登録
$ git push -u origin master
参考までに、リモートリポジトリのURLを変更する方法を紹介します。間違ったURLを登録してしまった場合はこちらで修正してください。
# リモートリポジトリのURLを更新
git remote set-url origin git@github.com:username/new_repo
リファレンス:Managing remote repositories
githubからリモートリポジトリをコピー: git clone
githubなどに既に上がっているリモートリポジトリをローカルにコピーする場合は、git cloneコマンドを使用します。
ここでは例としてpythonライブラリのnumpyのリポジトリをコピーしています。
# numpyのgithubリポジトリをコピー
git clone https://github.com/numpy/numpy.git
ブランチ関連コマンド
ブランチの作成/削除/切り替えや、過去のコミットに切り替えるにはgit checkoutコマンドを使用します。
説明 | コマンド |
---|---|
新規ブランチを作成 | git branch <ブランチ名> ※元にするブランチを指定しブランチを作成する場合 git branch <ブランチ名> <元にするブランチ名> |
ブランチを切り替える | git checkout <ブランチ名> |
ブランチを作成し、切り替える | git checkout -b <ブランチ名> ※元にするブランチを指定しブランチを作成する場合 git checkout -b <ブランチ名> <元にするブランチ名> |
ブランチを削除する | git branch -d <ブランチ名> |
他のブランチから特定のファイルを取得する。 | git checkout <ブランチ名> -- <ファイル名> ※ディレクトリも可能 git checkout <ブランチ名> <ディレクトリ名> |
リモートブランチから特定のファイルのみ取得する。 | git checkout origin/[取得したいブランチ名] -- [取得したいファイルパス] ※チェックアウトするときの[取得したいファイルパス]は、現在いるディレクトリからの相対指定のパス |
ローカルでの作業を取り消す | git checkout . |
過去のコミットを参照する | git checkout <commit id> ※commit idはgit logコマンドで確認できる |
特定のタグを参照する | git checkout refs/tags/<タグ名> |
ブランチを作成する
ブランチを作成するには、git branchコマンドもしくはgit checkoutコマンドに-bオプションを付けて実行します。
# masterブランチを元に、devブランチを作成
git branch dev master
# ブランチの作成と切り替えを同時に行う場合
git checkout -b dev master
# リモートブランチを元にする場合は、git fetchでリモートの情報を取得してからブランチを作成する。
git fetch origin
git branch dev origin/master
ブランチの作成もとを指定しない場合、現在いるブランチを元に作成されます。想定外のブランチを元にして作成しないためにも、参照元のブランチは指定した方が安心です。
参考サイト:Gitでブランチの派生元を間違えたときの解決方法
他のブランチからファイルを取得する
他のブランチにあるファイルを現在のブランチにコピーするにはgit checkout コマンドを使用します。リモートリポジトリからも取得可能です。
# リモートのmasterブランチから、program.pyを取得
git checkout origin/master -- program.py
参考サイト:【git】リモートのブランチそのものや1ファイルのみをローカルにチェックアウトするメモ
特定のコミット/タグを参照する
過去のコミットやタグを参照して変更を確認する、新たにブランチを切って分岐するといったことはよくあると思います。この際もgit checkoutコマンドが使えます。
# git logで確認したcommit idを指定して、過去のコミットに移動
git checkout dbc6cd…
# 特定のタグ(ここではtag_20210403)に移動する場合
git checkout refs/tags/tag_20210403
# 元のブランチに戻る場合。-fオプション指定で、変更を削除して、強制的に戻る。
git checkout -f mater
コミット系コマンド
説明 | コマンド |
---|---|
Indexに追加する | git add -u(—update): Trackingされていて、変更があった全てのファイルをadd -n: addされるファイルを確認(実際にaddされない) |
コミットする | git commit -m 'コメント': コミットコメントを入力 —amend: 直前のコミットを上書きする |
マージする | git merge <ブランチ名> 現在のブランチにマージする —no-ff: fast-forwardしないようにする |
コミットを取り消す | git reset <オプション> <commit id> —soft Working DirectoryとIndexは変更せず、指定したコミットに戻る —mixed Working Directoryは残し、Indexは指定したコミットに戻る。(HEADも移動) —hard Working Directoryも一緒に指定したコミットに戻る。(削除される。) ※使用する際は注意が必要 |
コミットを打ち消すコミットを作成 | git revert 例) git revert HEAD # 直前のコミットを打ち消すコミットを作成する |
コミットにタグをつける | git tag -a <タグ名> -m 'コメント' <コミット> ※<コミット>を省略すると現在のブランチの最新のコミットに付く |
タグを削除 | git tag -d <タグ名> |
ファイルを削除する | git rm <ファイル> ・オプション -cached: ファイルは残しつつgitの管理から除外(indexから削除される) |
ファイルを編集しコミットする
ローカルで追加や編集したファイルは区切りの着いたタイミングでリポジトリにコミットし、作業内容を記録します。
ここでは、new_file.txtを新規で作成し、ローカルリポジトリにコミットします。
# 新規ファイル(new_file.txt)をindexに追加
git add new_file.txt
# ローカルリポジトリにコミットする。(-mオプションで, コメント"add new_file"も同時に入力)
git commit -m "add new_file"
コミットを取り消す: git reset
一度作成したコミットがあまり上手くなかったので、取り消したくなるケースもあると思います。
git resetコマンドを使うと作成したコミットを取り消すことができますが、どのレベルで取り消すかはオプション(soft, hard, mixed)によって変わってきます。
softオプションを指定してresetした場合は、ローカルの変更やindexは更新せずに、指定したコミットまで戻ります。
要は、git addを実行し、git commitする前の状態です。
# オプションsoftを指定し、コミットを取り消す(HEAD~: 1つ前のHEAD)
git rest -—soft HEAD~
hardオプションを指定してresetした場合は、ローカルの変更も含めて指定したコミットまで戻ります。
ローカルで編集したファイルも消えてしまうので、使用する際は注意が必要です。
# オプションhardを指定し、コミットを取り消す。※使用は要注意。
git reset -—hard HEAD~
安全にコミットを取り消すには、git revertコマンドを使用します。
このコマンドでは、指定したコミットを取り消すコミットを新たに作成します。コミットの履歴は多くなりますが、変更した履歴が残るので安全に取り消すことができます。
# HEADの1つ前のコミットを取り消す
git revert HEAD~
ファイルを削除する: git rm
gitで管理されているファイルを削除する場合は、git rmコマンドを使用します。
通常のrmコマンドではindexから削除されません。
また、workingには残しつつ、indexから削除するには—cachedオプションをつけます。
# working treeとindexからファイル(new_file.txt)を削除する
git rm new_file.txt
# workingには残しつつ、indexから削除
git rm —cached new_file.txt
余談ですが、git statusでdeleted表示のあるファイルを一度に削除する場合、次のコマンドで実現できます。
git rm $(git ls-files --deleted)
リモート系コマンド
説明 | コマンド |
---|---|
リポジトリを新規取得 | git clone <リポジトリ> ・ブランチを指定してクローンする場合 git clone -b <ブランチ名> <リポジトリ> |
リモートブランチを取り込む | git pull origin <ブランチ名> ※以下のコマンドと等価 git fetch <remote> <branch> git merge FETCH_HEAD |
リモートの新規ブランチを取得 | git fetch origin <ブランチ名> # リモート追跡ブランチ作成 git checkout <ブランチ名> |
リモートの情報を取得する | git fetch [リポジトリ] ・ブランチを指定することも可能 git fetch origin dev |
リモートにPushする | git push origin <ブランチ名> ※ブランチを指定してPushする場合 git push origin <ローカルブランチ>:<リモートブランチ> 例:git push origin dev:dev |
リモートの特定ブランチを削除 | git push --delete origin <ブランチ名> 例:git push —delete origin dev |
リモートにタグを反映する | git push origin <タグ名> |
リモートブランチの変更を取得する: git pull
リモートブランチでの変更を取得し、ローカルリポジトリに反映するにはgit pullコマンドを使用します。
# リモートリポジトリのmasterブランチの変更を、ローカルの現在のブランチに取り込む。
git pull origin master
もしくは、git pullコマンドはgit fetchコマンドとgit mergeコマンドを合わせたものなので、次のやり方でも同じ結果になります。
# リモートリポジトリのmasterブランチの変更を、Trackingブランチorigin/masterに取り込む。
git fetch origin master
# Trackingブランチorigin/masterを現在のブランチにmerge
git merge origin/master
リモートブランチに変更を反映する: git push
リモートリポジトリにローカルの変更を反映するには、git pushコマンドを用います。
# 反映元と反映先のブランチを指定してリモートにPush。(反映元ブランチ:反映先ブランチ として指定)
git push origin master:master
カレントブランチをPushしたい場合は、以下のコマンドを用いるとブランチ名を明示せずにPushできます。
# カレントブランチをPush
git push origin HEAD
http://git-scm.com/docs/git-push#Documentation/git-push.txt-codegitpushoriginHEADcode
git push origin HEAD
A handy way to push the current branch to the same name on the remote.
確認系コマンド
説明 | コマンド |
---|---|
Working treeのステータスを表示 | git status |
コミットログを表示 | git log |
変更内容を表示 | git diff |
タグ一覧を表示 | git tag |
ブランチ一覧を表示 | git branch |
ブランチやコミット間の差分を確認:git diff
git diffコマンドを使うとブランチやコミット、Working tree間の変更を確認できます。
# ブランチdevとブランチmasterのファイルnew_file.txtの差分を確認
git diff dev:new_file.txt master:new_file.txt
# リモート追跡ブランチorigin/masterとの差分を確認
git diff origin/master
コミットの履歴をグラフで可視化して確認: git log —graph
ターミナルでコミットログをグラフで確認することもできます。
# コミットログをグラフ表示
git log --oneline --graph --all
終わりに
頻繁に使用するgitコマンドを用途ごとにまとめました。
今回記載した以外にもよく使用するコマンドはあるので、随時ページは更新していく予定です。
コメント