diff --git a/src/chapters/chapter2.md b/src/chapters/chapter2.md index f9dec3d..bfcbe1c 100644 --- a/src/chapters/chapter2.md +++ b/src/chapters/chapter2.md @@ -1,256 +1,237 @@ # 第二章 - 率先躬行のサインポスト -Git とは何かという事や Git を使う理由について説明してきました。 +Git とは何かということや Git を使う理由について説明してきました。 ここから Git の操作方法をコマンドラインインタフェース (CLI) のコマンドと Fork というソフトウェアを使用して説明します。 -なお CLI を使った説明は「Git 初心者への道 - お仕事で困らないレベルまでググっとします。[^2]」や「今日からはじめる GitHub 〜 初心者が Git をインストールして、プルリクできるようになるまでを解説[^3]」といったページを見て、なんとなくの雰囲気を掴むのが良いでしょう。 +なお CLI を使った説明は「Git 初心者への道 - お仕事で困らないレベルまでググっとします。[^1]」や「今日からはじめる GitHub 〜 初心者が Git をインストールして、プルリクできるようになるまでを解説[^2]」といったページを見て、なんとなくの雰囲気を掴むのが良いでしょう。 Fork は以下の URL からダウンロードできます。Fork は Windows と macOS に対応しています。 `https://git-fork.com/` -## Git によるバージョン管理を始める +## Git によるバージョン管理を始める `git init` `git init` や `git clone` は任意のディレクトリで Git によるバージョン管理を始めるためのコマンドです。 いわば未来ガジェット研究所でタイムリープマシンが作られた状態にするものです。 -### Fork でのやり方 +Fork を起動した後、メニューの File から Init New Repository を選びます。 -Fork を起動すると、ブックマークウィンドウが表示されます。Windows 版の場合は Fork を起動した時に表示される画面の左端に表示されます。Mac 版の場合は 「Cmd + B」というショートカットキーで表示する事ができます。 -そのブックマークウィンドウの中で、三つ横並びに表示されているボタンのうち、一番左のボタンを押します。 +![メニューのFileからInit New Repositoryを選択している図](https://i.gyazo.com/0194555935fde3f096354652bbd49567.png) -![Fork のボタン](/assets/images/ch2/git-init/source-tree/buttons.jpg) +Init New Repository を選ぶと、ディレクトリを選択する画面になるのですでにあるディレクトリもしくは新たにディレクトリを作って、そのディレクトリを選びます。 +その状態で「フォルダーを選択」を押すと、選択したディレクトリ(フォルダ)が Git のリポジトリとして使えるようになります。 -ボタンを押すといくつか選択肢が表示されますが、その中の「リポジトリを作成」を選択します。すると、リポジトリの保存先ディレクトリや、名前を決める画面が表示されます。 +![リポジトリが作られた状態](https://i.gyazo.com/4f06f842f2579b411fccec39a8bbe184.png) -![リポジトリ名を決めている状態](/assets/images/ch2/git-init/source-tree/dialog.jpg) - -情報を入力した上で「作成」ボタンを押すと、空のリポジトリができます。これでタイムリープマシンが作られた状態になります。 -しかし、今までの作業内容がまだ無いため、過去に戻ったり改変したりはできません。 - -![リポジトリが作られた状態](/assets/images/ch2/git-init/source-tree/empty.jpg) - -## すでにあるリモートリポジトリを使ってバージョン管理を始める +## すでにあるリモートリポジトリを使ってバージョン管理を始める `git clone` すでにあるリモートリポジトリを自分の PC 上へコピーし Git によるバージョン管理を始められるようにします。 -その前に、リモートリポジトリについて少し説明をします。リモートリポジトリとは、自分の PC 以外にあるリポジトリの事を指します。 +その前に、リモートリポジトリについて少し説明をします。リモートリポジトリとは、自分の PC 以外にあるリポジトリのことを指します。 「自分の PC 以外にあるリポジトリ」ですが「インターネット上や誰かの PC 上にあるリポジトリ」を指します。 他の章で「ネットワーク上のリポジトリ」という言葉がありましたが、これは「リモートリポジトリ」と同じ意味です。 このリモートリポジトリを自分の PC 上にコピーするのがこれから説明する手順です。 -これにより、例えばラボメンなど、他の人と共同でタイムリープマシンを使って作業できる体制が整います。 - -## 作業内容を記録する - -作業した内容をリポジトリに記録します。例えるならば、Steins;Gate でストーリーを進めた後、セーブをするようなものです。 - -### Fork でのやり方 - -リポジトリ内にファイルを新しく作成した場合 Fork 上ではファイル名の横に「?」が付く形で表示されます。これは、ファイルがまだバージョン管理されてない事を示しています。 - -![変更したファイルにチェックを付ける前](/assets/images/ch2/git-commit/source-tree/add-before.jpg) - -この状態でファイル名の左横にあるチェックボックスへチェックを付けると「ステージングエリア」といわれるところにファイルが移動します。 - -![変更したファイルにチェックを付けた後](/assets/images/ch2/git-commit/source-tree/add-after.jpg) +これでたとえばラボメンなど、他の人と共同でタイムリープマシンを使って作業できる体制が整います。 -移動した状態で、画面の下部にある「コミットメッセージ」と書かれている場所に任意のメッセージを入力します。 +Fork を起動した後、メニューの File から Clone を選ぶと次の画面になります。 -![コミットメッセージを入力する前](/assets/images/ch2/git-commit/source-tree/commit-before.jpg) +![Forkでクローンするときの画面](https://i.gyazo.com/dc1a89b72a6dd0486a4a5e7c946d8f40.png) -入力した後「コミット」ボタンを押すと、作業した内容がリポジトリに記録されます。なお、初回以降は画面上部にある「コミット」ボタンを押す事により、メッセージを入力できます。 +ここでリポジトリの URL とクローン先のディレクトリを選択し Clone を押すと選択したディレクトリにリポジトリが置かれます。 -![コミットした後](/assets/images/ch2/git-commit/source-tree/commit-after.jpg) +## 作業内容を記録する `git commit` -ちなみに、コミットメッセージなどが表示されている場所の「ラベル」部分に「HEAD」という記載がありますが、これは「現時点でどのブランチにいるかを判別する情報」です。 -つまり、世界線の観測ができているということです。例えるならばダイバージェンスメーターです。 +作業した内容をリポジトリに記録します。たとえるならば、Steins;Gate でストーリーを進めた後、セーブをするようなものです。 -## 作業内容を無かった事にする +リポジトリ内にファイルを新しく作成した場合 Fork 上では Unstaged Changes という欄に表示されます。 +ファイルがまだバージョン管理されてないことを示しています。 -岡部は、ダルにメールを送信した後、秋葉原 UPX でタイムマシン理論についての講義を受けましたが、ディスカッションで紅莉栖に完全に論破されてしまいました。 -岡部にとって、論破されたという事は無くしたい事象ですが Git であればそれができます。 - -### Fork でのやり方 - -方法としては、作業内容を無かった事にするファイルを右クリックで選択し「リセット(Windows の場合は破棄)」を選択します。 +![ファイルがUnstaged Changesにある状態](https://i.gyazo.com/b547aee9bc275d48807c05e34bba57a1.png) -![作業内容を無かった事にする](/assets/images/ch2/git-checkout-file/source-tree/before.jpg) +この状態で「Stage」ボタンを押すと Staged Changes という欄へファイルが移動します。 +これでコミットするための準備が整うことになります。 -変更を本当に破棄していいか確認の画面が表示されるので「OK」を押します。 +![ファイルがStaged Changesへ移動した状態](https://i.gyazo.com/104c5dc7dc8010516112742013b8edfd.png) -![作業内容を無かった事にするか確認がされる](/assets/images/ch2/git-checkout-file/source-tree/confirm.jpg) +ファイルを移動した状態で、画面の右下部にある「Enter commit subject」と書かれている場所に任意のメッセージを入力します。 -これで、紅莉栖に論破されたという事が無くなりました。 +![コミットメッセージを入力しているところ](https://i.gyazo.com/78d87e651f16232cf3993ec8dc85adea.png) -![論破された事を無くした後](/assets/images/ch2/git-checkout-file/source-tree/after.jpg) +入力した後「Commit File」ボタンを押すと作業した内容がリポジトリに記録されます。 -## 作業内容の差分を見る +![コミットした後](https://i.gyazo.com/fa7fc133722fd2a5987620ad766d3a78.png) -作業内容の差分を見ます。 -例えるならば、まゆりが死んだ理由を前回死んだ理由と比較し、そこから試行錯誤するようなものです。 +なお右上のコミット一覧が表示されている場所に「master」という表記がありますが、これは「現時点でどのブランチにいるかを判別する情報」です。 +つまり世界線の観測ができているということです。たとえるならばダイバージェンスメーターです。 -Fork では、特定の作業内容を選択する事で、その作業内容の一つ前の作業内容と比べてどのような変更をしたのか見る事ができます。 +## 作業内容を無かったことにする `git checkout -- <ファイル名>` -![Fork で作業内容の差分を見ている例](/assets/images/ch2/git-diff/source-tree/diff.jpg) +岡部は、ダルにメールを送信した後、秋葉原 UPX でタイムマシン理論についての講義を受けましたが、ディスカッションで紅莉栖に完全に論破されてしまいました。 +岡部にとって、論破されたということは無くしたい事象ですが Git であればそれができます。 -## ブランチの一覧を見たり、新たにブランチを作ったりする +方法としては、作業内容を無かったことにするファイルを右クリックで選択し「Discard changes」を選択します。 -ブランチの一覧を見たり、新たにブランチを作ったりします。「ブランチ」は例えるならば「世界線」となり、ブランチを作るという事は「世界線の観測」になります。 -また、リポジトリには「HEAD」という「自分が今どのブランチ(世界線)にいるのか分かるファイル」があり、それはダイバージェンスメーターだと言えるでしょう。 -では、ブランチを作る方法を説明していきます。なお、現在のブランチは「秋葉原が電気街となり、フェイリスのお父さんが生きている世界線」だとします。 -「秋葉原が電気街となり、フェイリスのお父さんが生きている世界線」で鈴羽を引き止めるために、岡部が D メールを送信しました。ここまでの作業内容は以下のようになります。 +![作業内容を無かったことにする](https://i.gyazo.com/9466853e76869d34ccee44d5a7809a87.png) -![新たなブランチを作る前](/assets/images/ch2/git-branch/source-tree/before.jpg) +変更を本当に破棄していいか確認画面が表示されるので「Discard」を押します。 +これで紅莉栖に論破されたという事実は無くなりました。 -この状態から Fork もしくは GitHub for Windows (Mac) を使って「鈴羽を引き止めるために D メールを送信した後の世界線」というブランチを作ります。 +## 作業内容の差分を見る `git diff` -### Fork でのやり方 +作業内容の差分を見ます。まゆりが死んだ理由を前回死んだ理由と比較し、そこから試行錯誤するようなものです。 -Fork の画面上部にある「ブランチ」を押すとブランチ名を入力する画面が表示されます。この画面内の新規ブランチの項目に任意の名前を入力します。 +Fork では特定の作業内容を選択した上で、右下のウィンドウのタブの中から「Changes」を選択すると、その作業内容の一つ前の作業内容と比べてどのような変更をしたのか見られます。 -![ブランチ名を決めているところ](/assets/images/ch2/git-branch/source-tree/name.jpg) +![Fork で作業内容の差分を見ている例](https://i.gyazo.com/95d9afe7b05355904715f3e6f833d681.png) -「ブランチを作成」を押すとブランチができた状態になり、かつ作ったブランチ(鈴羽を引き止めた世界線)に移動しています。世界線変動が起きました。 +## ブランチの一覧を見たり、新たにブランチを作ったりする `git branch` -![ブランチを作った後](/assets/images/ch2/git-branch/source-tree/after.jpg) +ブランチの一覧を見たり、新たにブランチを作ったりします。 +「ブランチ」はたとえるならば「世界線」となり、ブランチを作るということは「世界線の観測」になります。 -## 作業内容をリセットする +ではさっそくブランチを作る方法を説明していきます。 +現在のブランチは「秋葉原が電気街となり、フェイリスのお父さんが生きている世界線」だとします。 +「秋葉原が電気街となり、フェイリスのお父さんが生きている世界線」で鈴羽を引き止めるために岡部が D メールを送信しました。 -作業内容を無かった事にします。例えるならば、タイムリープのようなものです。 -「作業内容を無かった事にする」と似ていますが、違いとしては「すでにリポジトリに追加した作業内容も無かった事にできる」と「作業内容をリセットしたという事が履歴に残る」があります。 -たとえば「作業内容を無かった事にする」はリーディング・シュタイナーが働かないので記憶から無くなってしまいます。しかし「作業内容をリセットする」はリーディング・シュタイナーが働くため記憶に残ります。このように例えれば分かりやすいと思います。 -話を戻しますが「鈴羽を引き止めた世界線」でいくつか作業をした結果、履歴が以下のようになりました。最新の作業内容は「SERN の襲撃によりまゆりが死んでしまった…」となっています。 +ここまでの作業内容は次のようになります。 -![鈴羽を引き止めた世界線でいくつか作業した後の状態](/assets/images/ch2/git-reset-before.jpg) +![新たなブランチを作る前](https://i.gyazo.com/d0ef35f87cc3b21c845a01f6567f3105.png) -ここで最新の作業内容である「SERN の襲撃によりまゆりが死んでしまった…」という作業を無かった事にして、紅莉栖がタイムリープマシンを完成させたところにタイムリープします。 -タイムリープするためには、戻したい作業内容の一つ前の作業内容を右クリックで選択し「このコミットまで "ブランチ名" を元に戻す」を選択します。 +ここから「鈴羽を引き止めるために D メールを送信した後の世界線」というブランチを作ります。 +特定のコミットを選択した上で右クリックすると「Create New Branch」というメニューがあるのでこれをクリックします。 +するとブランチ名を入力する画面が表示されるので「Branch name」のところに任意の名前を入力します。 -![git resetをおこなおうとしている状態](/assets/images/ch2/git-reset-right-click.jpg) +![ブランチ名を決めているところ](https://i.gyazo.com/27de5c818129920fdc64628a3c4edf90.png)] -これで、作業内容から「SERN の襲撃によりまゆりが死んでしまった…」というのが消えました。 +するとブランチができた状態になります。左メニューから作ったブランチを選択してクリックするとブランチを移動した状態になります。 +世界線変動を起こしました。 -![git resetをした後の状態](/assets/images/ch2/git-reset-after.jpg) +![ブランチを作った後](https://i.gyazo.com/be50ac379e402205de4b65a0d14957bb.png) -## 作業内容を改変する +## 作業内容を戻す `git revert` -作業内容を改変します。例えるならば、タイムリープマシンを使って過去の作業をやり直す感じです。 -電話レンジ(仮)を改造してタイムリープマシンができた後、萌郁やラウンダー達の襲撃もしくは他の要因により、まゆりが何度も死んでしまった状態の最新の作業内容ですが「ラウンダー追ってきて、まゆりが刺されて死んだ」となっています。 +作業内容を無かったことにします。ただしその無かったことにしたことはログに残ります。 +「作業内容を無かったことにする」と似ていますが、違いとしては「すでにリポジトリに追加した作業内容も無かったことにできる」と「作業内容をリセットしたということが履歴に残る」があります。 -![まゆりが何度も死んでしまったときの作業内容](/assets/images/ch2/git-rebase/source-tree/message-edit-before.jpg) +これをたとえるならば、タイムリープのようなものです。 -## コミットメッセージを修正する +前に書いた「作業内容を無かったことにする」はリーディング・シュタイナーが働かないので記憶から無くなってしまいます。 +しかしこの「作業内容を戻す」はリーディング・シュタイナーが働くため記憶に残ります。このようにたとえれば分かりやすいと思います。 +話を戻しますが「鈴羽を引き止めた世界線」でいくつか作業をした結果、履歴が以下のようになりました。 +最新の作業内容は「萌郁やラウンダー達の手によりまゆりが死んでしまった」となっています。 -まず始めに、コミットメッセージを修正してみます。 -先ほどの最新の作業内容を記録したコミットが「ラウンダー追ってきて」と、間に「が」が足りないメッセージになっています。これを修正するため、直したい対象の一つ前の作業内容を右クリックで選択し「"コミット番号" の子を対話形式でリベース」を選びます。 +![鈴羽を引き止めた世界線でいくつか作業した後の状態](https://i.gyazo.com/2fd777aeb75c9e6163b4f9e900ac7632.png) -![対話形式でリベースを選択している状態](/assets/images/ch2/git-rebase/source-tree/message-edit-select.jpg) +ここで最新の作業内容である「萌郁やラウンダー達の手によりまゆりが死んでしまった」という作業を無かったことにして、紅莉栖がタイムリープマシンを完成させたところにタイムリープします。 +タイムリープするためには、戻したい作業内容を右クリックで選択し「Revert Commit」を選択した後にでてくる確認画面で「Revert」を押します。 +これで履歴から「萌郁やラウンダー達の手によりまゆりが死んでしまった」というのが消えます。 -すると対象となる作業内容が表示されます。そこでコミットメッセージを直したい作業内容を選び、画面下部の「Edit message」を押すと、コミットメッセージを編集する画面が表示されます。 +![git revertをした後の状態](https://i.gyazo.com/ccc6e8267dd224ab62e6dc81e138b887.png) -![コミットメッセージを編集している状態](/assets/images/ch2/git-rebase/source-tree/message-edit-now.jpg) +## 作業内容を改変する `git rebase` -任意のコミットメッセージを書いた後「OK」ボタンを押すとコミットメッセージが修正されます。 +作業内容を改変します。 -![コミットメッセージを編集し終えた状態](/assets/images/ch2/git-rebase/source-tree/message-edit-after.jpg) +まゆりが死んだと書かれた複数の履歴を 1 つにまとめてみましょう。 +まとめる対象のコミットの 1 つ前を右クリックで選択し「Interactive Rebase」から「Rebase '<ブランチ名>' to Here Interactively」を選びます。 -## 複数の作業内容を一つにまとめる +![git rebase squash するべく親となるコミットを選択している状態](https://i.gyazo.com/12c19463b3c3df32132633429a35581c.png) -次に、まゆりが死んだと書かれた複数の履歴を一つにまとめます。直したい対象の一つ前の作業内容を右クリックで選択し「"コミット番号" の子を対話形式でリベース」を選びます。 +今回は 4 つの作業内容を対象としました。 +ここから作業内容をまとめるには「Interactive Rebase」の画面で一番下のコミットを除い他コミットを fixup のモードにする必要があります。 +初期状態だと全てのコミットが「Pick」になっていますが、「Pick」と書いている部分をクリックして「Fixup」にする必要があります。 -![git rebase squash するべく親となるコミットを選択している状態](/assets/images/ch2/git-rebase/source-tree/squash-right-click.jpg) +![コミットの扱いをどうするかの一覧](https://i.gyazo.com/e295bc0797576013dbf34f9a26fc0373.png) -今回は四つの作業内容を対象としました。ここから作業内容をまとめるには「Squash with previous」を三回押します。「まとめる作業内容の数 - 一回 Squash with previous を押す」と覚えるといいかもしれません。 +一番下のコミットはコミットメッセージを編集するために「Reword」とします。 -![git rebase squash しようとしている状態](/assets/images/ch2/git-rebase/source-tree/squash-before.jpg) +![一番下のコミットをRewordにした状態](https://i.gyazo.com/55de371328f73a45fb22b8b42010f79b.png) -その後、まとめた作業内容のコミットメッセージを編集するために「Edit message」を押します。 +編集後に次のような上のコミット 3 つは「Fixup」が選択されて、一番下のコミットは「Reword」になっていれば問題ないです。 +これで右下の「Rebase」を押します。 -![コミットをまとめた後コミットメッセージを編集している状態](/assets/images/ch2/git-rebase/source-tree/squash-message-edit.jpg) +![全ての作業が終わった状態](https://i.gyazo.com/51c701d325b691134004a35575182dfc.png) これで、まゆりが死んだと書かれた複数の履歴がまとめられました。 -![git rebase squashした状態](/assets/images/ch2/git-rebase/source-tree/squash-after.jpg) - -## ブランチを移動する +![git rebaseが完了した状態](https://i.gyazo.com/459a2232362f835559ef5fab0a98bd1a.png) -現在のブランチから別のブランチへ移動します。例えるならば D メールを送った結果、世界線変動が起こった状態を、任意のタイミングで起こせるというものです。 -Git のブランチは「世界線」です。D メールによる世界線変動は、世界の状況に影響を及ぼしてましたが、Git ではそういった副作用が無く世界線の移動ができます。 +## ブランチを移動する `git checkout <ブランチ名>` -### Fork でのやり方 +現在のブランチから別のブランチへ移動します。 +あらためてですが、Git のブランチは「世界線」です。 +D メールによる世界線変動は世界の状況に影響を及ぼしてましたが、Git ではそういった副作用が無く世界線の移動ができます。 -移動の方法は簡単です。 -画面左端に表示されているブランチ一覧から、移動したいブランチの名前をダブルクリックする事により、ブランチを移動できます。 +ブランチ移動の方法は簡単です。 +画面左端に表示されているブランチ一覧から、移動したいブランチの名前をクリックすることでブランチを移動できます。 以下の図では「鈴羽を引き止めた世界線」から「萌郁が IBN 5100 を手に入れた世界線」へ移動しています。 -![ブランチを移動した後](/assets/images/ch2/git-checkout.jpg) +![ブランチを移動した後](https://i.gyazo.com/a7a9801e6aa31bc3a01010ca22084d79.png) -## リモートリポジトリに作業内容を送る +## リモートリポジトリに作業内容を送る `git push` -自分がした作業内容を、リモートリポジトリに送ります。例えるならば、岡部が紅莉栖にまゆりを助けるべくあれこれしてきた事を共有する感じです。 -今まで、岡部はまゆりを助けるために何度もタイムリープをおこなって奮闘してきましたが、その事を他のラボメンは知りません。 -奮闘している事を知られないままタイムリープマシンを壊そうとしても、紅莉栖に止められるのはしかたないです。 +自分がした作業内容をリモートリポジトリに送ります。 + +岡部が紅莉栖にまゆりを助けるべくあれこれしてきたことを共有する感じです。 +今まで、岡部はまゆりを助けるために何度もタイムリープをおこなって奮闘してきましたが、そのことを他のラボメンは知りません。 +奮闘していることを知られないままタイムリープマシンを壊そうとしても、紅莉栖に止められるのはしかたないです。 なので、他のラボメン(今回の場合だと紅莉栖)に今まで岡部がしてきた作業内容を伝える必要があります。 -画面上部の「プッシュ」を押します。初期設定では現在のブランチのみが選択されているので、その状態で「OK」を押します。 +左サイドバーの「Branches」からプッシュしたいブランチ名の上で右クリックをすると「Push '<ブランチ名>' to 'origin'」というメニューが出てくるのでそれを押します。 +そうするとプッシュ時の確認画面が次のように表示されます。 -![git push 前](/assets/images/ch2/git-push-branch-select.jpg) +![git push 前](https://i.gyazo.com/d739067838d1d99a066464683c1767d4.png) -プッシュが終わり、作業内容の一覧に「origin/ブランチ名」という文字が表示されるようになりました。なお、「origin」というのは、リモートリポジトリの事を指しています。 -作業内容をリモートリポジトリに送ったとともに、紅莉栖にも今までの作業内容が伝わりました。 +プッシュが終わり、作業内容の一覧に「origin/ブランチ名」という文字が表示されるようになりました。 +なお「origin」というのは、リモートリポジトリを指しています。 +これで作業内容をリモートリポジトリに送り、紅莉栖に今までの作業内容が伝わりました。 -![git push 後](/assets/images/ch2/git-push-after.jpg) +![git push 後](https://i.gyazo.com/d564917b079610136615cf02d6e81940.png) -## リモートリポジトリの変更内容を自分の PC 上のリポジトリに取り込む +## リモートリポジトリの変更内容を自分の PC 上のリポジトリに取り込む `git pull` 他人がした変更をリモートリポジトリから取得し、自分の PC 上のリポジトリに取り込みます。 -リモートリポジトリでは、岡部以外にもラボメンが作業しています。 -例えば紅莉栖を見てみると、岡部の様子がおかしいのでタイムリープしてきたのか聞いていたり、マイフォークが欲しいと言った事を記録していたりします。 +リモートリポジトリでは岡部以外にもラボメンが作業しています。 +たとえば紅莉栖を見てみると、岡部の様子がおかしいのでタイムリープしてきたのか聞いていたり、マイフォークが欲しいと言ったことを記録していたりします。 -その場合、自分の PC 上のリポジトリ(鈴羽を引き止めた世界線)に比べ、リモートリポジトリ(origin/鈴羽を引き止めた世界線)が二つ進んでいます。 +![紅莉栖が作業している](https://i.gyazo.com/00c8a2c17105de29381ae225d33e1bbb.png) -![紅莉栖が作業している](/assets/images/ch2/git-pull-before.jpg) +これらの記録を手元に持ってきて作業ログを同期する必要があります。 +では同期してみましょう。画面上部の「Pull」を押します。確認画面が表示されるので「Pull」を押します。 -ここで、画面上部の「プル」を押します。基本は表示された画面内の「OK」を押すだけで良いです。 +![pull してくるブランチを選んでいる状態](https://i.gyazo.com/986b730a9f58cbc75ee7286b5ce4687d.png) -![pull してくるブランチを選んでいる状態](/assets/images/ch2/git-pull-select.jpg) +これで自分の PC 上とリモートのリポジトリの作業内容が同期します。 -「OK」を押す事により、自分とリモートのリポジトリの作業内容が同期します。 +![自分の PC 上のリポジトリとリモートリポジトリの同期をとった](https://i.gyazo.com/3d3262bcba628a8d72a1f8113aaaa8f0.png) -![自分の PC 上のリポジトリとリモートリポジトリの同期をとった](/assets/images/ch2/git-pull-after.jpg) +## 別のブランチでの作業内容を取り込む `git merge` -## 別のブランチでの作業内容を取り込む +別ブランチの作業内容を現在のブランチに取り込みます。 -別ブランチの作業内容を現在のブランチに取り込みます。例えるならば、世界線を収束させるための作業です。 -「鈴羽を引き止めた世界線」というブランチで作業をした結果、鈴羽がタイムトラベルを失敗して「失敗した失敗した失敗した失敗した失敗した」と何度も書いた手紙を書き残し、自殺してしまいました。 -その結果、岡部は天王寺裕吾から鈴羽が書いた手紙を受け取る事になります。 +「鈴羽を引き止めた世界線」というブランチで作業をした結果、鈴羽がタイムトラベルを失敗して「失敗した失敗した失敗した失敗した失敗した」と何度も書いた手紙を書き残して自殺してしまいました。 +その結果、岡部は天王寺裕吾から鈴羽が書いた手紙を受け取ることになります。 -![鈴羽を引き止めた世界線でいくつか作業をした例](/assets/images/ch2/git-merge/source-tree/before.jpg) +![鈴羽を引き止めた世界線でいくつか作業をした例](https://i.gyazo.com/ddf90aa5a6d7b53db46f096b77821004.png) -それを無かった事にするため D メールを送り世界線を変動させて鈴羽を引き止めないようにします。その為には「秋葉原から萌えが消えた世界線」のブランチへ移動します。 +それを無かったことにするため D メールを送って世界線を変動させ、鈴羽を引き止めないようにします。 +その為には「秋葉原から萌えが消えた世界線」のブランチへ移動します。 -![秋葉原から萌えが消えた世界線に移動した](/assets/images/ch2/git-merge/source-tree/branch-change.jpg) +![秋葉原から萌えが消えた世界線に移動した](https://i.gyazo.com/0981a13b7d0b14c281f58cdc8a22d095.png) -移動した後は D メールを送った状態が最新の状態となっています。この状態から「鈴羽を引き止めた世界線」でしてきた作業を「秋葉原から萌えが消えた世界線」に統合します。 -方法としては、統合したいブランチの名前を右クリックして「"統合するブランチ名" を "統合させたいブランチ名" へマージ」を選択します。 +移動した後は鈴羽を引き止めるために D メールを送った状態が最新の状態となっています。 +この状態から「鈴羽を引き止めた世界線」でしてきた作業を「秋葉原から萌えが消えた世界線」へ統合します。 +方法としては、統合したいブランチの名前を右クリックして「Merge int '<統合したいブランチ名>'」を選択します。 -![マージ対象のブランチを選択している状態](/assets/images/ch2/git-merge/source-tree/select.jpg) +![マージ対象のブランチを選択している状態](https://i.gyazo.com/b69d866cf7cddd8b08d0d8206add9ea4.png) -選択すると、確認メッセージが表示されるので「確認する」を押します。 +選択すると、確認ウィンドウが表示されるので「Merge」を押します。 -![マージする際の確認メッセージ](/assets/images/ch2/git-merge/source-tree/confirm.jpg) +![マージする際の確認メッセージ](https://i.gyazo.com/5ee29d9fe3d853412ec4d80cbba5ced1.png) すると「秋葉原から萌えが消えた世界線」に「鈴羽を引き止めた世界線」でしてきた作業内容が統合された状態になります。 +これで世界が収束しブランチ同士を統合できました。 -![マージした後の状態](/assets/images/ch2/git-merge/source-tree/uncommit.jpg) - -ただし、まだコミットはされていないのでコミットをしておきます。ここではコミットメッセージを「尾行は中止前のメールは SERN の罠というメールを送信した」としています。 - -![マージした際のコミットメッセージを書いている状態](/assets/images/ch2/git-merge/source-tree/commit-message.jpg) - -コミットが完了しました。このように D メールを送信する感覚で、ブランチ同士を統合する事ができます。 - -![マージが完了した状態](/assets/images/ch2/git-merge/source-tree/after.jpg) +![マージが完了した状態](https://i.gyazo.com/a73bef720f7bc58698ffb0eceaaa7a15.png) -[^1] https://git-fork.com/ -[^2] https://gist.github.com/yatemmma/6486028 -[^3] https://employment.en-japan.com/engineerhub/entry/2017/01/31/110000 +[^1] https://gist.github.com/yatemmma/6486028 +[^2] https://employment.en-japan.com/engineerhub/entry/2017/01/31/110000