【超入門】Github登録からGit使い方の基本まで完全解説③【初心者必見】

こんにちは,米国データサイエンティストのかめ(@usdatascientist)です

前回の記事ではリモートリポをクローン(clone)してローカルリポを作成しました.

クローン(clone)ってなに?という人は前回の記事を是非一読ください.

【超入門】Github登録からGit使い方の基本まで完全解説②【初心者必見】

さて,今日は実際にローカルリポのコードを更新するところやろうと思います.もっとぽくいうと.

ローカルリポで新しいbranchを作ってそこでコードを更新して,addしてcommitする

...ってなに言ってるかわからないですよねw

でもこの記事を読みながら実際に手を動かせば,多分明日にはなんの話かわかっていると思いますw

めちゃくちゃわかりやすく説明するよう努力しますmm

なにか質問等あればTwitter(@usdatascientist)にメッセージいただければと思います.

ローカルリポでユーザをセット

ローカルリポでユーザをセットしましょう.一度セットすれば次回からは不要です.

git config user.name '{USERNAME}'でusernameを, git config user.email '{EMAIL}' でemailをセットします!

-global オプションをつければ,他のリポでもデフォルトでユーザがセットされるので毎回やる必要がなくて楽です.

新しいbranch(枝)を作る

Gitでは,それぞれの修正箇所や担当機能ごとにbranchというものを作ります.branchはいわゆる’枝’です.

GitはVersion管理なので,コードのVersionを管理していきますよね?version1, version2って感じで.

でも時には開発途中のVersionもあるだろうし,実際にユーザに使ってもらうVersionもあるし,テスト段階のVersionもあります.

ある開発者がAという機能を作る時に,今ユーザーが使っているVersionを直接変更したり,テスト段階のものを変更したら大変なことになりますよね?

Gitでは,それぞれのVersionをひとまずbranchとして管理します.

幹に枝が付いているように,Gitにもメインのbranch(masterと呼ぶ)に様々なbranch(feature branchと呼ぶ)が付いていて,基本的には開発したい機能ごとにbranchを作っていきます.

ある枝から他の枝が生えていき,途中で合流させたりすることで,どんどんMasterの枝を太くしていくイメージです.

開発者はbranchを切り替えて適切なbranchの上で作業をします

このbranchを切り替えることをcheckoutすると言います.また,新しくbranchを作る場合も同じです.是非今度機会があったら使ってみてください.「新しいbranch checkoutしちゃうよ?」って

それでは,前回cloneしたmy-first-repoが今なんのbranchがあるのか確認してみましょう.

branchの一覧は $ git branch コマンドで表示できます.

my-first-repoにはmasterというbranchがあって,*(アスタリスク)がついているので,今自分はmaster branchにいることがわかります.作成したばかりなので当然ですね.

それでは新しいbranch: update-readme branchをcheckoutしてみましょう.

$ git checkout -b {branch} で新しいbranchを作成することができます.

するとupdate-readmeに移動していることがわかります.

ここからはこのbranch上で作業をします.masterで作業するわけには行かないからね!毎回機能ごとにbranchを立てる癖をつけましょう!

ファイルを更新しコミット(commit)する

では早速このupdate-readme上でREADME.mdを更新してみましょう.

$ subl README.md でREADME.mdをsublimeで開きます.(*sublコマンドが動かない方は,pathの問題かもしれません.こちらのstackoverflowの質問をご参照ください.基本的には/usr/local/bin/配下にsublがあればOKです.ない場合はリンク先の回答にあるように $ ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/. でシムリンクを貼ります.リンク元にちゃんとsublがあることを確認してください.SublimeのバージョンによってはSublime Text 2.appのようにフォルダ名が変わっていたりします.また, $ echo $PATH でちゃんと/usr/local/bin/にPATHが通っていることを確認しましょう.
zshシェルを使っている場合は上記の方法では解決しないようです.こちらを参考にしてみてください.)

Sublimeを使ってThis is my first repoをThis is my awesome repoに変更して保存します.

補足
第一回でリポを作る時に「Description」に入力した文字がREADME.mdに記入されています.

(Sublimeをいれていない人は是非こちらの記事を参考にいれてみてください!便利なエディタです.)

変更できましたか?変更できたら今度は $ git status コマンドで今のリポの状態をみてみます

‘Changes not staged for commit’「変更がコミットへのステージングがされていない」と言っています.

日本語に訳しても意味わかんないですよねw

Gitでは変更は全てコミット(commit)という単位で管理されます.いわゆるセーブポイントみたいなものです.

そして,このcommitは複数の変更をまとめてcommitします.

どういうことかというと,今README.mdを変更しましたが,実はまだ途中で他の変更もしたいとしますよね?

「ここまでの変更を次のcommit対象にする」 といった具合にある程度まとめておきます.

この「次のcommit対象に入れる行為」をaddすると言いい,commit対象の変更達をstaging areaとかstagingと言います.

なので先ほどの’Changes not staged for commit’はupdateしたファイルがまだstagingにあがってないよということ.

それでは $ git add {ファイル名やフォルダ名} コマンドでstagingにあげましょう.

$ git add . とやるとカレントディレクトリ以下全ての変更をstagingにあげることができて便利です.

さて, $ git status をみると,Changes to be committed: と,commitできる変更があると言っているのでcommitしてみましょう!

$ git commit -m '{メッセージ}' で今stagingに上がっている全ての変更をcommitできます. -m  でコミットメッセージを入れる必要があります.これあとからこのcommitがどういう変更だったのかがわかるようにするためです.クオテーション ' を忘れないよーに

結構チームでコミットメッセージのルールとか決めているとおもあります.他の人がみてをわかるようにするのがいいです.

例えば add new button and deal with errorsとかです. updateとか,なんの更新なのかわからないメッセージはやめましょう.嫌われますw

ここでもう一度statusをみてみましょう.

nothing to commitとありますね.もうstagingのものはcommitしたので特にcommitするものはないぜ!と言っています.

これで無事commitすることができました!イエイ!

commitの履歴(log)を確認する

さて,commitしたものは $ git log で今までの履歴を確認できます.

みてわかる通り,このbranchには2つのcommitがあります

bb0dccb33a9814fe89e97482cc61bff14462d10d という謎の暗号のようなものはcommit IDと呼ばれるもので,乱数文字なので人によって異なります.その他Authorや日時,コミットメッセージが記載されています.

リポ作成時にInintial commitというメッセージでcommitされているのもわかると思います.

masterブランチに戻ってみる

では,masterブランチに戻るとどうなるのでしょうか? $ git branch master でmasterブランチにcheckoutしてみましょう

$subl README.md でファイルを開いてみると・・・

This is my first repoになっていてawesomeになってないですよね

これは,あくまでも先ほどの変更はupdate-readmeブランチ上のことで,masterブランチには反映していないんです!

最終的にmasterブランチに反映することで初めて自分の開発内容が日の目を浴びることになります.では,どうすればいいのでしょう?

次回はこのupdate-readmeブランチでのcommitをmasterブランチに反映するところまでをやりたいと思います.↓次回はこちら

【超入門】Github登録からGit使い方の基本まで完全解説④【初心者必見】

わからないところがありましたらTwitter(@usdatascientist)で受け付けておりますのでお気軽にどおぞ.フォローもお願いします.

それでは!