ITエンジニアの登竜門と言えるgit管理
gitコマンドが扱えなきゃエンジニア失格といっても過言ではないでしょう。
大丈夫です。僕も覚えるの苦手なので用語とコマンドを分かりやすくまとめてみました。ブックマークしてぜひ活用ください。
git用語とコマンド一覧
リポジトリ
リポジトリとはファイルやディレクトリの状態を記録する場所です。
ファイルの変更・追加・削除もろもろ「履歴管理を行う場所」という解釈で良いでしょう。
大きく分けてローカルリポジトリとリモートリポジトリの二種類があります。
- ローカルリポジトリ・・・自分のPCにあるリポジトリです。自分のローカル環境での履歴管理を行います。
- リモートリポジトリ・・・サーバー(GitHubやBitBucketなどのサービス上)にあるリポジトリです。大人数で管理を行う場合はこのリポジトリをベースとして履歴管理を行います。
initコマンド
$ git init
リポジトリを作成したいディレクトリでこのコマンドを実行すると「.git」というディレクトリが作成されます。この中にリポジトリを管理するためのファイルが作成されます。
リモートリポジトリを作成する場合
$ git init --bare --shared
これで,同じグループに属するユーザーがこのリポジトリの変更を行うことが可能となります。(共有リポジトリの作成)
ブランチ(branch)
ブランチ(branch)は履歴の流れを分岐して記録していくためのモノです,分岐したブランチは他のブランチの変更内容の影響を受けません。
リポジトリにはmasterという名前のブランチが最初から存在します。作業をする場合はこのmasterをベースにブランチを派生させていきます。(一般にブランチを切るという言い方をする)
$ git branch [ブランチ名]
ブランチ名を省略すると現在のブランチが表示されます。
チェックアウト
チェックアウト(checkout)は操作対象のブランチを切り替えることです。
checkoutコマンド
$ git checkout [ブランチ名]
指定したブランチをチェックアウトします。
クローン(clone)
クローン(clone)は「リモートリポジトリ」をコピーしてローカルリポジトリを作ることです。クローンを行うことでリモートリポジトリと同じ環境を誰でも自分の環境に作ることができます。
cloneコマンド
$ git clone [リモートリポジトリのURL] [クローン先のディレクトリ(省略可)]
実行したディレクトリの配下に指定したURLのリポジトリが複製されます。[クローン先のディレクトリ]を指定することも可能です。
プル(pull)
プル(pull)はリモートリポジトリの変更をローカルリポジトリに反映させることです。クローン後にリモートリポジトリが変更された場合はpullを行いローカルリポジトリに反映させます。
pull コマンド
$ git pull [リモートリポジトリのURL][ブランチ名]
現在作業しているブランチに,指定したリポジトリ,ブランチの変更をプルします。
インデックス(index)
インデックス(index)は,どのファイルをどのように変更を行ったのかというのを管理します。変更点の塊のようなものです。
addコマンド
$ git add [追加・変更したファイル]
〜複数インデックスに登録する場合〜
$ git add . (現ワーキングディレクトリの変更ファイルすべて)
$ git add -A (ツリー全体の変更ファイルすべて)
ワイルドカード*を使用することも可能です。
コミット(commit)
コミット(commit)はインデックスに登録している変更内容をローカルリポジトリに反映することです。
commitコマンド
$ git commit
コミットにメッセージを付けることも可能です。
$ git commit -m "例:ログイン機能の追加"
コミットを行っただけでは,まだリモートリポジトリには反映されません。
resetコマンド
$ git reset
直前に行ったコミットを取り消します。
うっかり間違えてコミットしてしまった場合はresetでOK
リバート(revert)
リバートは(revert)は特定のコミットを無かったことにします。
リバートはコミットを消去するのではなく,変更を打ち消すコミットを新たに作成します。見た目上はコミットが消えたように見えます。
revertコマンド
$ git revert [コミットID]
プッシュ(push)
プッシュ(push)はローカルリポジトリの変更をリモートリポジトリに反映させることです。ローカル環境での変更点を他人に共有することができます。(pushしただけでは,他人のリポジトリには反映されない。他人がpullしてようやく反映される。)
pushコマンド
$ git push [リモートリポジトリのURL][ローカルのブランチ名]:[リモートのブランチ名(省略可)]
[リモートのブランチ名]は省略した場合は,同ブランチにpushされます。
フェッチ(fetch)
フェッチ(fetch)はリモートリポジトリの変更点があるか確認を行います。プルを行う前にフェッチで変更内容を取り込みます。
fetchコマンド
$ git fetch [リモートリポジトリ]
マージ(merge)
マージ(merge)はブランチとブランチを結合することです。
git管理では,作業する人,内容によりブランチを切って修正,変更を行っていきます(Aさんログイン機能-branchA,Bさんログアウト機能-branchB)。
そして,最終的にはすべての変更をmasterブランチにマージ(merge)することにより1本化し完成形となります。(branchA→master,branchB→master)
masterはログイン,ログアウト機能が実装されたものとなります。
mergeコマンド
$ git merge [マージ元のブランチ]
現在のブランチに指定したブランチをマージします。
コンフリクト(conflict)
コンフリクト(conflict)はマージしようとしたブランチ同士の修正箇所が競合している状態です。コンフリクトが生じた場合は人の手で修正し解決していきます。コンフリクトが解決できたら無事にマージが可能となります。
スタッシュ(stash)
スタッシュ(stash)は変更を退避することです。
コミットとは違って,変更点がリポジトリに反映されないので「お試し」の状態を退避しておくことも可能です(いつでもスタッシュから戻すことも可能)。
また,マージの際,コンフリクトが生じた場合にスタッシュを使うことで変更点を退避し一時的にコンフリクトを回避することも可能です。
stashコマンド
$ git stash 現在の状態をスタッシュします。
$ git stash list スタッシュリスト一覧取得
$ git stash apply [スタッシュ名] スタッシュをもとに戻す
$ git stash drop [スタッシュ名] スタッシュを削除する
リベース(rebase)
リベース(rebase)はブランチとブランチを結合することですが,マージと違う部分は,変更履歴が片方のブランチしか残りません。いくつかメリットがあります。
- コミット履歴がわかりやすくなる
- 一度コミットした内容を編集することができる
- コミットメッセージを後から変更できる
- 2つ以上のコミットを1個に統合する
rebaseコマンド
$ git rebase [リベース元のブランチ]
現在のブランチに,指定したブランチをリベースします。
フォーク(fork)
フォーク(fork)はリモートリポジトリをベースに新しいリモートリポジトリを作成することです。リモートリポジトリのコピーといった解釈で良いです。
よく使うgitコマンド
git status
$ git status
前回のコミットからの変更点を表示します。
git diff
$ git diff
$ git diff --stat 変更したファイル名と行数を表示します。
インデックスとワークツリーの差分を表示します。
git log
$ git log
$ git log --stat 変更したファイル名と行数を表示します。
コミットのログを表示します。
以上が簡単なまとめになります。
基本コマンドですが,これだけ使えれば十分にgit管理が行なえます。
gitをGUIで扱いたいならSourcetreeがおすすめです。
ぜひ,使ってみてください。
コメント