皆さん,こんにちは!エンジニアアイドル「ハックガールズ」の堤沙也と濱ヶ崎美季です。私達と一緒にGitを学ぶこの連載,第4回からは,具体的によく使うコマンドの使い方や動きについて見ていきます!Gitの基本的な使い方とコマンドGitの基本的な使い方の流れを,よく使うコマンドにそって確認していきましょう。Gitの概念として,下記の3つの「場所」を把握しておく必要があります。ワーキングディレクトリ(作業ディレクトリ)ステージングエリアGitディレクトリ(リポジトリ)ワーキングディレクトリとは,その名の通り,自分自身が作業を行うローカルディレクトリのことです。initされたあとのローカルディレクトリで,ファイルの新規作成や編集を行った際は,まずこのワーキングディレクトリに存在する状態になります。ステージングエリアとは,位置的にはワーキングディレクトリとGitディレクトリの中間の位置にあります。わかりやすい日本語に例えると,Gitディレクトリに「登録」する前の「仮登録」といった状態がステージングという作業を行ったあとの状態になります。addというコマンドを実行することで,その変更がステージングに上がった状態になります。Gitディレクトリ(リポジトリ)とはファイルやディレクトリの状態を記録する場所のことです。先ほどのステージングエリアが「仮登録」だとすると,こちらが「本登録」といったイメージを持つとわかりやすいかと思います。リポジトリには,ローカルリポジトリ・リモートリポジトリという2つの概念が存在します。ローカルリポジトリとは,リモートに送る前に手元でファイルの変更を記録しておく場所。commitというコマンドで,対象のファイルがコミットされた状態,すなわちローカルリポジトリに登録された状態になります。pushというコマンドです。リモートリポジトリとは,複数人で共有できる,ローカルリポジトリ以外のネットワーク上やファイル上に存在するものです。sample.txtというファイルをワーキングディレクトリで作成したとします。sample.txtと実行するとsample.txtはステージング状態になります。sample.txtと実行することで,リポジトリに変更が反映された状態となります。sample.txtと実行すれば,状態をメッセージとともに見ることができます。ステージングエリアの存在意義は「ひとつのコミットには主題となる変更と無関係な変更を含めない」というポリシーを実現しやすくなることにあります。「バグ修正Aとバグ修正B」をひとつの変更としてセットでcommitしてしまった場合にあとからcommitの打ち消しをする必要が発生した場合など,非常に困ってしまうのです。commitの概念pullとpushここまで自身の手元で作業したファイルを共有リポジトリに反映するまでの流れを見てきましたが,逆に,他人がリモートリポジトリに登録した変更を取り込むにはどうしたら良いのでしょうか。Gitの醍醐味は複数人での共同開発が容易にできること。pullすることで,リモートリポジトリの変更内容がローカルリポジトリのブランチに反映されます。ブランチとは何でしょうか。ブランチとは,Git管理下にあるファイルの変更履歴を,分岐して記録していくためのGitの機能です。initした直後は,すべてのファイルが「masterブランチ」と呼ばれるブランチ上に存在します。ここから開発の用途に合わせて,たとえば「developブランチ」「⁠designブランチ」「⁠fix_hogeブランチ」などといった派生ブランチを切っていきます。ブランチを分岐させる必要があるのかというと,複数の変更を同時進行で行いたい場合に片方の変更が,もう片方の変更とぶつかり合うことを防ぐためです(※変更が競合することをコンフリクトといいます⁠)⁠。切ったブランチはあとから本筋に統合することが可能です。呼びますが,ここはまた奥深いので,詳しい話は次回以降にしましょう。pullコマンドを叩いた時に起こることは,リモートのブランチの状態をローカルのブランチにマージするということです。先ほど省略しましたが,マージとはすなわち変更を取り込んで自身の状態に統合すること。コマンドの後にリモートブランチ名などを指定します。pullすることにより,他者の変更を取り込み,その変更を起点に更新を続けていくことができるようになります。さやみんとはまーのGitトークさやみん:今回からようやく具体的にGitを動かしていった感じがするね。はまー:Gitの特長の,変更の履歴を記録することと複数人での共同開発について具体的に見ることができて,やっとイメージが掴めてきたよ!さやみん:うん,Gitのコマンドはまだまだたくさんあるけど,今日紹介したものはGitでの開発を行っていくと何度も何度も使うコマンドだから,ここを押さえておくのはマストかな。はまー:ブランチの概念とかがちょっとわかりづらいなあ。Subversionでもブランチはあるけど,ちょっと考え方が違うみたい?さやみん:そうだね!Subversionにおけるブランチっていうのは,実態はディレクトリなんだよね。Gitの場合は,あくまで本筋のmasterブランチとは平行して存在するもので...パラレルワールド,みたいな。他のコマンドもSubversionと同名で動きが違うものが出てきたよね。さやみん:そうそう,そのあたりは別のバージョン管理システムを使ってた人は,最初慣れないよね。私も混乱した(笑⁠)⁠。ハックガールズ・パズルガールズでの活動を経て,都内のWebサービス全般を扱う企業にてWebアプリケーションやスマートフォンアプリの設計・開発を担当。扱っている言語は,Ruby,Python,PHPなど。大手外資系SIer企業に入社。ハックガールズ・パズルガールズ・クエスチョンでの活動を経て,現在は株式会社SCRAPのIT・広報担当として勤務。最近は編集部上がりの厳格な先輩(コンパイラ)の下で日本語の文法と格闘中。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。