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

グローバルでAI開発者・データサイエンティストを目指す人向け
おすすめUdemy講座一覧

TOEIC300→海外就職の英語勉強法まとめ

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

Github入門連載第4回目です.今回はpull reqestの作成とmergeを記事にします!

*前回の記事はこちら

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

いままでの振り返り

ちょっと前回までで長くなったので今まで何をしたのか振り返りましょう.

第一回:Githubに登録し,my-first-repoというリモートリポを作成しました.

第二回:Gitを使ってローカルリポを作成しました.

第三回:update-readmeというbranchを作成し,README.mdを更新し,add, commitをしました.

今回は,第三回での変更内容をmasterブランチに反映するということをやります.せっかく変更したのにmasterにそれが更新されなかったら意味ないからね!

ローカルリポからリモートリポに変更内容をpushする

第二回で説明したとおりローカルで変更した内容をリモートリポに反映させることをpushすると言います.

うさぎ
なんでいちいちリモートリポに反映するの?
ぺんぎん
ローカルリポのmasterに反映させればいいじゃん

という声が聞こえてきそうですが,masterブランチというのは他のメンバーが修正する可能性のあるブランチです

もちろん,今は練習なのでだれも修正しませんがw

誰かが修正するブランチを自分のローカルで更新するのはNGです.

だって,自分が作業しているブランチに誰かがローカルで更新してたら「え?そんなの知らないけど」ってなりますよね?他人のローカルリポなんて見れませんから.

masterブランチというのはチーム全員でちょくちょく更新するいわば共有ブランチです.

共有のブランチをローカルリポで更新するわけにはいきません.共有のブランチはリモートリポで更新します

それでは,my-first-repoリポジトリでupdate-readmeブランチにcheckoutして,update-readmeに移動しましょう.

ここでpushする前に気を必ずしてほしいことがあります.

それは...

pushする前に必ずpullするということです!!(超超重要)

これ,超重要です.

うさぎ
pullってなんだっけ??

第二回でも説明しましたが,リモートリポの変更をローカルリポに反映させることをpullすると言います.

うさぎ
なんでpushの前にpullするの?

リモートリポで変更がされたかどうかなんて,わからないですよね?

なので,pushの前に毎回かならずpullする癖をつけましょう.今回の例では例えばすでにREADME.mdが誰かに更新されていて,ローカルリポのREADME.mdが古い可能性がありますよね?

誰かが更新していたら,それを一度ローカルリポに反映し,pushするのです.

場合によっては誰かが同じ箇所を修正している可能性もあります.その場合はローカルリポでどちらの修正を削除します.このようなケースをmerge conflictと言います.

mergeというのは,あるbranchを別のbranchにmergeすることを意味しますが,pullというのは実は

1.データをとってくる 2.mergeする

という二つのことを裏では行なっています.(この「1.データをとってくる」ことをfetchといいます)

pullというのは,リモートリポからfetchして,自分のリポにmergeをすることです.

(merge conflictについてはまた別の機会にきちんと説明しますね.)

それでは以下のコマンドでpullします.

$ git pull {repository} {branch} です. {repository} は,当然 https://github.com/{username}/my-first-repo ですが,gitにすでに省略コードなるものがあり, $git remote -v で確認することができます.が,基本 origin なので覚えなくていいです.

なので $ git pull origin master はoriginのmasterブランチからpullをするということです.

(大抵常に最新状態にあるbranchはmasterなので今回masterからpullしてますが,これはチームによって異なります.開発用のbranchを別で設けていたりもしますし)

さて,pullしたあとの出力は,’Already up to date’ということでとくにmergeするものはありません.当然ですね,練習なので今は誰もmy-first-repoを更新する人なんていませんからw

それではpushします.

$ git push {Repository} {ブランチ名} です. {Repository} はpullの時と同じくoriginでOKです.

ここで,直接masterにpushするのではなく,ローカルリポのブランチと同じ名前のupdate-readmeを指定するようにしましょう.

usernameとpasswordを聞かれるので正しく入力すると,pushされます.

githubのリポページをみてみよう!

自分のgithubのリポページにアクセスしてみましょう.https://github.com/{USERNAME}/my-first-repoでアクセスできます.

するとこんな感じになっていると思います.

むむ,なにやら黄色いものが見えますね.

これは,

「update-readme」というbranchに更新があるからmasterと比較(Compare)してよかったらpull request出してね

というgithubからのメッセージです.

‘Compare  & pull request’をクリックすると,

‘Open a pull request’というページになりました.

うさぎ
pull requestてなにコワイ

pull requestというのは「この変更をpullしてね」という要求(Request)を出すものです.

ここではbase:masterになっているので「よいよいmasterブランチさん,私のbranchをpull(つまりfetchしてmerge)してくれ」と依頼を出すのです.

pull requestを出そう!

pull request (日本だとプルリク, アメリカだとprとかPRって略します.)を実際に作ってみましょう!

といっても簡単です. ‘Leave a comment’のところにコメントを書いて,変更箇所に問題がなければ’Create pull request’をクリックすればOKです.

チームによってはReviewerをつけたり,色々ルールが追加されますが今回は省きます!

すると以下のページに遷移します.

実際の現場では自分で出したプルリクを自分でMergeするケースはない(Reviewerをつけてるケースなんかはある)ですが,今回は練習ということで,チームのメンバーがプルリクを出したという想定で...

実際にはプルリクを出した後,メンバーに「プルリクだしたからレビューしてね」とか「プルリクだしたからマージしてね」とか言ったり,プルリクと同時にメールが飛んだりslackのbotがpostしたりします.

(ちなみにこのページへはpull requestのタブからこれます.)

Merge(もしくはReview)する立場の人はまず’File changes’タブで「このpull requestが何の変更なのか」を確認しましょう

問題がなければ’Merge pull request’ボタンを押して’Confirm merge’を押してmergeします.コメントをつけてあげると親切かもしれません.

リポのページにもどって,README.mdが更新されていることを確認しましょう.これで変更がmergeされました.

ローカルリポをpullしよう!

リモートリポが更新された状態ですからね,ローカルリポのmasterブランチを更新しましょう!

まずmasterブランチにcheckoutして

masterからpullしましょう.

はい. $subl README.md でREADME.mdを開いてみてください.更新されてるでしょ?^^

まとめ

いやーーーーーーーーーー

長い!!

長かったですねぇ

お疲れ様でした.

取り合えずこれで,基本的なGitの使い方終了です!

これをできればプログラミング学習中に自分でリポ作ってGit運用してという「一人Git」ができるようになります.

基本的な流れは

リポ作って⇨クローンして⇨branch作って⇨ファイル修正して⇨addでstagingして⇨commitして⇨(一応)pullして⇨pushして⇨pull request出して⇨mergeして⇨ローカルリポでpull

というのが大まかな流れです.が,一人Gitするときはbranch作ったりpull request出したりはしなくていいかもですね.必要に応じて使い分けましょう.

他にもversionを戻したりブランチ消したりmerge conflictしたり色々やることはあるけど,その時々で覚えればいいです.

わからなくなったらいつでも本ブログに戻って読み直してみてください.何回もやっているうちに長いように思えるこのサイクルも一瞬でできるようになります.マジで.

本ブログでは他にもプログラミング初心者のためになる情報を色々と記載しておりますので,是非みていってください!

Twitter(@usdatascientist)のフォローもお願いします!ご要望なども受け付けております.

それでは!