【Mac】Backlogを使ったGit管理①

環境：Mac OS X El Capitan ver10.11.5

Backlogを使ったGit管理です。SourceTreeを使わずに最低限の動作の流れを確認します。
今回ブランチは作っていません。

##1. PCのGit状態管理

事前準備

<b>・brewをアップデートしてGitをインストールする</b>
ターミナルを起動する

```
brew update
brew install git
```

Gitのバージョン確認
`git -version`


・必要に応じてFinderの隠しディレクトリを表示させる
`defaults write com.apple.finder AppleShowAllFiles TRUE`

設定を反映するために「Finder」を終了する
`killall Finder`

または隠しディレクトリのみ表示するコマンドを実行する
`ls -d .*`


<b>・Gitの初期設定</b>
初めてgitを使う場合は設定を記述する

```objc
git config --global user.name "Majestic Aster" 
git config --global user.email "majestic.aster@sample.jp"
```

##2. ローカルリポジトリの作成

<b>a)ローカルに新しいリポジトリを作成する</b>
プロジェクトのディレクトリまで移動する
`cd プロジェクトのディレクトリ`
リポジトリの作成
`git init`（隠しディレクトリとして.gitで作成される）


<b>b)ステージングエリアへ対象ファイルを追加する</b>
`git add ファイル名`

若しくは
`git add .`
<b>ステージングエリアに全ファイルを追加する</b>

`git add -u`
一つ前のと最新のステージを比較して、<b>変更されたファイルをステージングエリアに追加する。</b>削除されたファイルの情報は追加されるが、新しく作成されたファイルは追加されない。

`git add -A`
`git add .`と`git add -u`を合わせたもの。<b>新規作成、変更、削除したファイルを全て追加する。</b>


>- 作業ディレクトリ
ローカル環境でユーザーが実際に作業するファイルが格納されている領域です。”ワーキングディレクトリ”や”ワークツリー”などとも言われますが、ここでは”作業ディレクトリ”とします。

>- ステージング・エリア
作業ディレクトリ上で変更されたファイルのうち、次回のコミット対象となっているファイルを記録しておく領域です。この領域は”index”と呼んだりもします。

>- Gitディレクトリ
リポジトリのすべての変更履歴を保存している領域です。ローカルにあるリポジトリの場合、このあとリモートリポジトリ（共有リポジトリ）に履歴情報を”プッシュ”する流れとなりますが、今回はローカルリポジトリ内の説明にとどめておきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/133946/8d2afef4-8c87-9cce-391a-b3ebed5caaf9.png)

>[Gitではじめるバージョン管理 〜ローカルリポジトリでファイルを管理してみよう〜](http://www.hivelocity.co.jp/blog/34777)より引用


##3. commitする

コミットとは、現在のファイルの変更や修正などの更新作業の情報を記録すること。コミットIDを指定することで過去のデータを参照できる。

ステージとは、コミットの前にindexファイルへ登録する（ステージする）こと。<b>ステージングエリアに追加されたファイルのみコミットされる。</b>

<b>・~~結果に~~コミットする</b>

```Objective-c 
git commit -m "コミットメッセージ"
```
・直前のコミットメッセージを修正する場合

```objc
git commit --amend -m "修正コミットメッセージ"
```

・その他の操作
`git reset 過去のコミットa`　　コミットを取り消す
※過去のコミットaから現在のコミットまでのコミットは取り消される
`git status`  リポジトリの状態を確認
`git diff`  差分を表示
`git log`  ログ（コミット履歴）を表示

##4. リモートリポジトリの作成

リモートリポジトリの作成

```
git remote add <name> <url>
// ex 
HTTP : git remote add name https://sample.backlog.jp/git/SAMPLE_GIT/sample(Backlog上のリポジトリ名).git
SSL : demo@demo.git.backlog.jp:/SAMPLE_GIT/sample(Backlog上のリポジトリ名).git

```

`git remote set-url <name> <newurl>` リモートリポジトリのアドレスを変更
`git remote rename <old> <new>` リモートリポジトリの名前を変更
`git clone <url>` リモートリポジトリを複製
`git remote` リモートリポジトリの一覧表示

##5. リモートリポジトリからfetchする
フェッチ(fetch)　＝　データを取得する
プル(pull)　＝　データを取得して自動的にマージする(fetch + merge)

データをリモートリポジトリからフェッチ（取得）する

```
git fetch リモート名
ex: git fetch sample
```

##6. リモートリポジトリへpushする
データをリモートリポジトリへpushする

```
git push リモート名 ブランチ名
ex: git push sample master
```

`git push -u sample master` のように-u(--set-upstream-to)オプションをつけると次回から`git push`だけで自動的にsample masterにpushする。
オプションをつけてpushする前に`git push`とすると`push.default`の設定によって挙動が変わるので注意が必要とのこと。Git2.0でデフォルトが安全なsimpleに変わった。


##参考
[サルでもわかるGit入門 〜バージョン管理を使いこなそう〜 | どこでもプロジェクト管理バックログ](http://www.backlog.jp/git-guide/)
[Gitではじめるバージョン管理 〜ローカルリポジトリでファイルを管理してみよう〜](http://www.hivelocity.co.jp/blog/34777)
[Git の基本 - リモートでの作業](https://git-scm.com/book/ja/v1/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%81%A7%E3%81%AE%E4%BD%9C%E6%A5%AD)

[git push引数省略時のデフォルト動作設定](http://qiita.com/dehali22/items/09cc89ed87f022668d80)
[git add -A と git add . と git add -u の違い](http://nekova.hatenablog.com/entry/2013/02/20/013909)
[git add 使い方](http://transitive.info/article/git/command/add/)