EatSmartシステム部ブログ

ウェブサイトの開発や運営に関する情報です。

Gitの基本操作について

EatSmartの新人エンジニアが第二回目のブログを更新したいと思います。
今回はGitの基本操作についてまとめてみました。

Gitとは

分散型バージョン管理システム
ローカルにリモートリポジトリの複製を作成し、複数人は各々のローカルで変更履歴を利用して自由にファイルファイルの編集やコミットができる
もともとはLinuxソースコードを効果的に管理すために開発された

主なツール:Github,GitBucket,BitBucuket,GitLab

リポジトリ

ファイルやディレクトリの状態を記録する場所。保存された状態は内容の変更履歴として格納されている。変更履歴を管理したいディレクトリをリポジトリの管理下に置くことでそのディレクトリ内のファイルやディレクトリの変更履歴を記録することができる

◇コミット

ディレクトリやファイルの状態を記録するための操作のこと
作業ディレクトリ上で一区切りついた時にコミットしてそれまでの作業を一旦保存する
記録するファイルを一時的に登録する場所をインデックスという

◇クローン

リモートリポジトリを複製してローカルリポジトリを作成すること
サーバーが保持しているデータをほぼ全てローカルにコピーする

◇ブランチ

作業履歴を枝分かれさせて記録していくためのもの

◆ masterブランチ

リポジトリに最初のコミットを行うと自動で作成されるブランチ
ブランチは複数作ることができブランチを作るにはすでにあるブランチをコピーしなくてはいけない
ブランチには名前を作ることができ開発者は自由にブランチを移動できる

最終的に全てのブランチはmasterブランチに結合される
各開発者は作業ごとにブランチを作る (=ブランチをきるという)

◆ブランチの作成
git branch ブランチ名

◆ブランチ間を移動する
git checkout ブランチ名



ローカルでの作業からリモートにアップデートするまでの流れ

ワーキングツリー   ⇒   インデックス(ステージング環境)
⇒  ローカルリポジトリ ⇒  リモートリポジトリ
◆ワーキングツリー
ファイルの編集作業場所でファイルの編集や追加、削除などを行う

◆インデックス
コミットするためのファイルを記録する場所
ワーキングツリーで編集したファイルは git add でインデックスへ移動させる

◆ローカルリポジトリ
リモートリポジトリにアップロードするためコミット履歴とファイルを記録する場所
インデックス上のファイルをgit commit でローカルリポジトリにコミットする

◆リモートリポジトリ
複数人で共有する場所
ローカルコミットしたファイルをgit pushでリモートリポジトリにアップロードする

◆プルリクエス
作成したブランチをmasterブランチにマージする時の確認作業のこと
差分を確認することができ、他の開発者から確認やレビューをしてもらうことができる

◆ブランチをマージする
マージしたブランチは削除する

コマンドの基本操作

git add ワーキングツリー上で編集したファイルをステージング環境へ追加する
git commit ローカルコミットを実行する
git commit -m 新規コミットを作成する
git commit -amend 直前のコミットを上書きする
git push ローカルリポジトリのブランチをリモートリポジトリへアップロードする
git log コミット履歴を表示する
git log --merge マージコミットだけを表示する
git reflog HEADの履歴一覧を表示する
git reset HEADの位置を変更する
git remote リモートリポジトリの最新状態をローカルリポジトリのリモート追跡ブランチにダウンロードする
git merge 指定したブランチを現在のブランチに統合する
git pull   最新のリモートリポジトリの内容をローカルリポジトリに反映する
git stash まだローカルコミットしていないファイルを一時的に待避させる
git cherry-pick 他ブランチの特定のコミットを現在のブランチに取り込む


Gitを使い始めた時はマスターブランチに結合?プルする?ワーキングツリーって何?
仕組みを理解するのに凄く苦労しましたがGitHub Desktopを使ったりして操作に慣れていきました。GUIで比較的簡単に操作ができるので初学者にはオススメのツールだと思います。

GitHub Desktopのメリット

◆開発ツール、エディターに依存しない
パソコン環境と統合されているのでお気に入りのソフトウェアを使って編集することができます
◆画像の差分は表示される
◆コマンドを抽象化しGitコマンドを知らなくても簡単に使える
コマンドラインに比べて機能が絞られていますが非常にシンプルな操作性となっている
◆最速のブランチ切り替え(checkout/stash不要)
◆簡単にリモートにpushできる
Publlish/Syncボタン押すだけでローカルリポジトリとリモートリポジトリを同期させることができる