【git】現場で頻繁に利用するgitコマンドまとめ【init, clone, commit】

blog title for "git summary" Linux

現場でよく利用するgitコマンドをまとめました。

git環境を新規に構築する手順

gitの環境を新規に構築する場合、主に2つのケースが考えられます。

  1. 自分のローカル環境を、新たにgitで管理する。
    • git initコマンドを使用
  2. 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のページから作成できます。

リファレンス:Create a repo

# リモートリポジトリを登録
# 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

参考サイト:ブランチを指定して git push する方法

カレントブランチをPushしたい場合は、以下のコマンドを用いるとブランチ名を明示せずにPushできます。

# カレントブランチをPush
git push origin HEAD

git push origin HEAD
A handy way to push the current branch to the same name on the remote.

http://git-scm.com/docs/git-push#Documentation/git-push.txt-codegitpushoriginHEADcode

確認系コマンド

説明コマンド
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コマンドを用途ごとにまとめました。
今回記載した以外にもよく使用するコマンドはあるので、随時ページは更新していく予定です。

コメント

タイトルとURLをコピーしました