こんにちは
銀座の見習いエンジニアやまそうです。
複数人でgitを使い開発をすると9割の方が使っている「git pull origin master」というコマンド。なんかこのコマンド打てばpullできて自分のローカルのソースは書き換わるし、pullっていうくらいだからmasterから引っ張ってきてるんでしょって感じの認識のgit初心者がいらっしゃると思います。
git pull origin masterでなんとなく何が起こるか分かってきた方のために簡単な解説をしたいと思います。
これを理解すると。。。
「pullできない!!」とか「これpullして大丈夫なの??」ってときに解決できます!
gitを使用するわけだし、よく使うコマンドなので必須な知識だと思いますのでぜひ当記事がお役に立てればいいなと思います。
pullとは??
これから順を追って解説していきます。
まずは「pull」についてです。
今回の記事はこれがメインと言ってもいいでしょう。後に「origin」と「master」について解説をいたしますがpullについて理解をしていただければ大方問題ありません。「origin」についてはぜひ当記事を読み進めて頂きたいです。「master」については一応解説をしますが大体みなさんが認識している通りのことを記述するので読まなくても大丈夫です笑
すこし前置きが入ってしまいましたが「pull」について解説をします。
pullとはfetchとmergeを同時に行う作業のことです。
まずこの一文をインプットしてください。「pullとはなに??」と聞かれたときにこのフレーズを使えば事足ります。
fetchとは
fetchとはgitのコマンドで「git fetch」と使います。fetchはリモートの情報を読み込んでローカルに反映させることです。
今回でいうリモートとはgitで複数人開発のときにでよく使うgithubやbitbucketのことです。リモートにはコミットログつまり開発に携わっている人たちが編集した編集履歴が保存されており、日々更新されています。ソースを編集したらgit pushといコマンドでリモートに自分の編集履歴を反映させますね。それが開発に携わっている人の分あるのです。しかも、それは毎日ソースを編集して開発をしているわけですから日々短時間で更新されます。
ところがあくまで更新されているのはリモート、つまりweb上にあるgithubやbitbucketだけです。自分のパソコンの中にあるソースやgitのコミットログには何ら影響はありません。
しかし、それでは複数人で開発をしているのに開発をしている人それぞれ違うソースになってしまいます。当然全員同じ状態でなくてはいけません。
そこでfetchを使いweb上に保存されているコミットログ(更新履歴)を自分にパソコンに反映させます。これで開発している人全員の更新履歴を自分のパソコンに取り込むことができます。
fetchを使ってみましよう
git fetch
更新がなかった場合何も表示されません。更新があった場合は数行でてきて更新されます。
mergeとは
じつはこれだけだと自分が今書いているソースコードには何も起こりません。ソースは何も更新されいていないはずです。fetchはリモートにある情報をダウンロード??だけをしてきた段階なのでここでmergeコマンドを使います。
mergeとは別のブランチを自分のブランチに変更をくっつけてくれます。
例えばAブランチではindex.htmlを作成して自分が作業しているBブランチではstyle.cssを作っているとします。それぞれを「create <ファイル名>」というログでコミットしたとします。そして「git merge A」とやると自分のブランチにAブランチをくっつけてくれるので、Bブランチでは作成していないindex.htmlが出現します。「git log」でログを見ると「create index.html」というログが追加されます。
これがmergeです。
mergeはローカル内のみでブランチをガッチャンコすることができます。
git merge A
fetchしてmergeする = pull
- fetchはリモートの情報をローカルに更新する
- mergeはブランチにブランチのコミットを追加できる
以上の2つを同時に行っているのがgit pullです!!
originってなんぞ
originはリモートのアクセス先を示したものです。
githubやbitbucketにリポジトリを作ってそこにプロジェクトを管理しますが沢山プロジェクトが存在する中でどのプロジェクトにアクセスすればいいか指定してあげないとですよね。
このoriginにはそのアクセス先が入っています。
下記コマンドを実行するとアクセス先とアクセスするときの名前が一覧で確認できます。
git remote -v
でもこんなの設定した覚えがないし最初からgitにはこのコマンドが用意されているのか?と思ったりもしますが、設定もしていますしoriginというコマンドも用意されているものではなく作ったものです。
リモートにプロジェクトを作成するときに「git remote add origin URL」を打っているのです。最初のうちの何も考えずガイドにあるコマンドをコピペしていると気づかないのですがリポジトリ登録時に設定しています。
このoriginの部分をhogeとかに変えると「git pull hoge master」となります。herokuでは「git push heroku master」と使いますね。
originは慣習みたいなもので大体使われています。よっぽどのことがない限り気にせずoriginを使いましょう。
master
これはブランチ名です。
ブランチを指定できるのでmergeしたいブランチ名を適宜いれかえましょう。
まとめ
ということで「git pull origin master」とはの解説をしてきました。ここまでで何が行われているのかだいぶ理解できたと思います。
今回出てきたgitのコマンドは複数人が同じ状態で開発ができるようにいいう目的で用意されているものです。そのためにweb上で全員の更新を管理し、web上にある情報をコマンド一発で取得できるようにしてくれています。
このことを念頭においておくとそれぞれのコマンドがなんのためにあって何をしてくれているのがか理解しやすいのではないかと思います。
最後まで呼んでいただきありがとうございました。
たのしいgitライフを!!
早く新しい記事をお願いします!
待ち遠しくて仕事に集中できません!
mergeとはの「そして「git merge A」とやると自分のブランチのAブランチをくっつけてくれるので、」→「そして「git merge A」とやると自分のブランチにAブランチをくっつけてくれるので、」でしょうか?
コメントありがとう御座います。
おっしゃる通りでございます。
自分の今現在いるブランチにAブランチをくっつけるという認識でございます。
私のミスでしたので修正をさせていただきます。ありがとうございます