Gitまとめ

リモートリポジトリとローカルリポジトリ

リポジトリとは、ファイルやディレクトリの情報や変更履歴まとめて記録しておく場所です。
複数人の開発者が参加するプログラミング環境において、ソースコードや仕様に関する情報をまとめて保管してくれます。

Gitのリポジトリにはリモートリポジトリローカルリポジトリの2種類があります。

  • リモートリポジトリ
    インターネット上またはネットワーク上のどこかに配置して、複数人で共有するリポジトリ
  • ローカルリポジトリ
    ユーザーが個人で利用するために、自分の手元のマシン上に配置するリポジトリ

初期化コマンド

git init

Gitリポジトリを新たに作成するコマンド。
バージョン管理を行っていない既存のプロジェクトを変更する場合や、空の新規リポジトリを作成して初期化したい場合に使用します。
git initを実行すると、カレントディレクトリに".git"フォルダが作成され、プロジェクトのバージョンの管理を開始できます。

addする

作業ディレクトリ(ワークツリー)の変更をステージングエリアに追加するための操作。
個々のファイルのアップデート内容を次回コミットの対象とすることをGitに指示します。
git addコマンドだけでは実際にはリポジトリに影響は与えないので、git commitコマンドを実行して変更を記録しなければいけません。

ーaddコマンドの種類ー
ワークツリーに新規登録もしくは変更されたファイルをaddする
(rmコマンドなどで削除されたファイルはaddされない)

git add .

一つ前と最新のステージを比較して、変更があった部分のみをaddする
(新規作成されたファイルはaddされない)

git add -u

変更されたファイル、削除されたファイル、新規作成されたファイル、全てをaddする (git add .とgit add -u の両方実行したのと同じ感じ)

git add -A
  • なんでaddしなければいけないの?

    一度にたくさんのファイルをcommitしたい場合に、新規作成や変更したファイルをステージングエリアにaddしておくことで一回のcommitで済むから。
    git addしてステージングエリアという場所に新規作成や変更したファイルたちをひとまとめにして置いておくと、それらを一気にcommitすることができるので、一回一回差分をチェック(git diffコマンド)してcommitするという手間を省くことができる!

  • ステージングエリア
    ステージエリアやインデックスとも呼ばれます。
    ステージングエリアの中身は .git ディレクトリの中にある"index"というバイナリファイルです。
    ステージングエリアはコミットしたいファイルをひとまとめにしてとりあえず置いておくのに使います。

commitする

ファイルやディレクトリの変更や追加を記録するための操作。
コミットを実行すると、リポジトリ内では前回コミットされた時からの差分を記録したリビジョンが記録されます。
最新のコミットから辿ることで過去の変更履歴やその内容を知ることができます。

コミットするときにはコミットメッセージの入力が求められます。あとから見てわかりやすいコメントを書くように心がけましょう。(適当に書いたらダメ!具体的かつ簡潔に)

git commit -m "コメント"

ー応用編ー
直前のコミットの内容を修正する

git commit --amend

コミットメッセージの書き方
提言: コミットメッセージの一行目には要求仕様を書け - Qiita
Gitのコミットメッセージの書き方 - Qiita

  • ここまでのまとめ

    ワークツリーで作業していたファイルを新規登録したり変更した時にaddしてステージングエリアにひとまとめにしておく。
    ステージングエリアにひとまとめにされたファイルたちをcommitしてローカルリポジトリに記録する。 f:id:marikooota:20160605140742p:plain

ブランチってなに

履歴の流れを分岐して記録しておくためのものです。
分岐したブランチは他のブランチの影響を受けないので、同じリポジトリで複数の変更を同時に進めていくことができます。 一つのプロジェクトから枝分かれさせて別の作業を行うことを「ブランチを切る」と言います。
また、分岐したブランチはマージ(合流)することで一つのブランチにまとめ直すことができます。

pushとpullとfetchとmerge

git push

ローカルリポジトリの内容をリモートリポジトリに送り込むコマンド

git fetch

リモートリポジトリの内容をローカルリポジトリに取り込むコマンド

git merge

リモートローカルのブランチを合流するコマンド

git pull

リモートリポジトリの内容をローカルリポジトリに取り込んだ後、現在のローカルのブランチに対して、それに対応するリモートのブランチをマージするコマンド

まとめるとこんな感じかな... f:id:marikooota:20160605192713p:plain

  • 7ちゃんマロくんむらちゃんの例
    7ちゃんの自己紹介ページを作るために、マロくんとむらちゃんも手伝うことになりました。

f:id:marikooota:20160605174407p:plain

三人は他のメンバーの作業の影響を受けないようにmasterから自分のブランチに切り替えて作業を行います。

  • むらちゃんの場合
git checkout #6680

swich to branch '#6680'と結果が返ってきたらOK!

写真ギャラリーの機能を追加し終わったむらちゃんはmasterに自分のブランチの変更を反映させます。

git add .
git commit -m "写真ギャラリー追加"
git push

このようにしたいところですが、masterに7ちゃんが先にpushしているので、むらちゃんは7ちゃんの変更をpullしてからpushします。

この例のようにブランチを切り替えながら作業を行うことで他のメンバーの作業による影響を受けることなく、自分の作業に取り組むことができます。
また、作業単位で履歴を残すことで、問題が発生した場合に原因となる変更箇所の調査や対策を行うことが容易になります。


では、
7ちゃんとむらちゃんが同じ箇所を変更していた場合、どうなるのでしょう?????

次回に続く...

今回のまとめ

  • Gitコマンド一覧
コマンド 説明
git init Gitリポジトリを新たに作成するコマンド
git add 作業ディレクトリの変更をステージングエリアに追加するコマンド
git commit ファイルやディレクトリの変更や追加を記録するコマンド
git pull リモートリポジトリの変更内容を取り込むコマンド
git push ローカルリポジトリの変更内容をリモートリポジトリに反映させるコマンド
git merge リモートローカルのブランチを合流するコマンド
git fetch リモートリポジトリの内容をローカルリポジトリに取り込むコマンド
git clone 既存のリポジトリのコピーを取得するコマンド
git status 現在の状態を見るコマンド
git diff 差分を見るコマンド
git log コミットのログを見るコマンド
git grep リポジトリで管理されているファイルを検索するコマンド
git rm ファイルを削除するコマンド

参考サイト
サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ
git add -A と git add . と git add -u の違い - Qiita
Git チュートリアルとトレーニング| Atlassian
git push の反対は git pull ではない - Qiita