RaiseTechの講義でも使っていたGit。
必要最低限の機能は使えるものの、あの時は付け焼刃で「とりあえず使えるようにした」感が強いので、PCを新しくしたことだし(Gitのインストールも必要なので)、ここらで改めてちゃんとGitを理解しておこうと思う。
4ヵ月という短い期間で、大事なところをしっかり教えてくれるRaiseTechのカリキュラムは素晴らしいが、一方でどうしても一発でできてしまったところなどは、理解が浅くなってしまう。(ハマったところは逆にちゃんと理解できる。ハマりたくはないがw)
というわけで、ここからは、自分のペースで理解の浅い部分をしっかりを抑えて、学校で習ったことをしっかりと「身に着ける」ことに主眼を置いていく。
今回使った書籍は「わかばちゃんと学ぶGit使い方入門」
この書籍は2017年版で、改訂2版として2021/6/21に新しいやつが出るらしいです。
が、Kindle版ですぐほしかったので、私は2017年の第1版を購入。(インストール時の画面などが若干違うので、待てる人は新しいやつ待ってみてもいいかも。概念なんかは変わらないので、もうインストールしているよって人は2017版でも問題ないと思います。)
買おうかどうか迷っている人に簡単に内容紹介
249ページ、ほぼ漫画と画像なので、文字が嫌いな人におススメ。
まずは試さずにざっと概要だけ読む程度なら、1時間かからず読めちゃいます。(もちろん、インストールして、実際に使ってみるとなると、それなりに時間がかかります)
Gitの概念をマンガとイラストで分かりやすく表現してあるので、初心者向け。
ただし、この本はSourceTreeを使ったGUIでの操作の説明がメインなので、コマンドで全部やりたいよっていう人には不向きです。
SourceTree(+Git)のインストール
早速SourceTreeをインストールしていく。
前回同様、GitのインストールとSourceTreeをインストールを実施。
インストールについては、わかばちゃんの本(2017年版)とはちょっと画面や内容が異なるので、上記のリンクの過去記事を参考に実施していく。
リポジトリの作成
練習用のフォルダ「sample」を作成して、Createタブからリポジトリを作成する
タブに練習用のフォルダ名が表示されていればOK
エクスプローラ上に.gitファイルができていることがわかる
※リポジトリ作成時に登録したフォルダ以下のファイルが、バージョン管理の対象となる
この操作に相当するgitコマンドは
git init
ローカルリポジトリを作成してくれる(.gitフォルダができる)
リポジトリを作りたいフォルダに移動して、git initコマンドを打つか、git init フォルダパスでもOK
Gitコマンドと対応するSourceTreeのGUI操作のまとめ
※具体的にどのように遷移するかは、以前の記事「GitとSourceTreeを見比べる」参照
現在の状況を確認する
SourceTree:GUIそのものが現在の状況表示(F5で更新)
git status
WorkTreeからIndexにステージングする
SourceTree:作業ツリーのファイルの「全てをインデックスに追加」または「選択をインデックスに追加」
git add . git add neco.txt
Indexからローカルリポジトリにコミットする
SourceTree:メッセージを入力して「コミット」ボタンを押す
git commit -m "ネコを作成"
WorkTreeとIndexのファイルの上げ下ろし
WorkTreeのファイル全てをIndexに上げる
SourceTree:作業ツリーのファイルの「全てインデックスに追加」
git add .
Indexのファイル全てをWorkTreeに戻す
SourceTree:Indexにステージ下ファイルの「全てインデックスから除く」
git reset HEAD
WorkTreeの一部のファイルをIndexに上げる
SourceTree:作業ツリーのファイルの「選択をインデックスに追加」
git add neco1.txt
Indexの一部のファイルをWorkTreeに戻す
SourceTree:作業ツリーのファイルの「選択をインデックスから除く」
git reset HEAD neco2.txt
過去のバージョンに戻す(過去のコミットにチェックアウトする)
組込み畑からやってきた身としては、Gitの「チェックアウト」という言葉が、どうしても自分になじまない。(かなり混乱する)
Gitでは、ファイルを特定のバージョンに戻すことをチェックアウトという。(=現在いる場所のコミットを移動する)
チェックアウトは現時点でのコミットを移動する(HEADがさすコミットIDが変わる)ため、チェックアウトしたときに指定したバージョンのデータが、作業フォルダ(WorkTree)にロードされる。
SourceTree:
PS C:\Users\Git\わかばちゃん\sample> git log commit 12345677890 (HEAD -> master) Author: cataws Date: Wed May 5 19:33:54 2021 +0900 ネコを2匹追加 commit 12345677891 Author: cataws Date: Wed May 5 17:53:15 2021 +0900 隠し味を追加 commit 12345677892 Author: cataws Date: Wed May 5 17:51:53 2021 +0900 文字コードをUTF-8に変更
エクスプローラ:
現時点では、ネコを2匹追加したところである。
これを、ネコを追加する前に戻す(「隠し味を追加」したところまで戻す=コミットのバージョンは12345677891)
SourceTree:該当のバージョンをダブルクリック
メッセージは出るがOK
バージョンが「隠し味を追加」まで戻る
PS C:\Users\Git\わかばちゃん\sample> git checkout 12345677891 PS C:\Users\Git\わかばちゃん\sample> git log commit 12345677891 (HEAD) Author: cataws Date: Wed May 5 17:53:15 2021 +0900 隠し味を追加 commit 12345677892 Author: cataws Date: Wed May 5 17:51:53 2021 +0900 文字コードをUTF-8に変更
エクスプローラ:
ちなみに、もう一度最新の状態(ネコが2匹追加された状態)に進めたい場合は、SourceTreeの「master」をダブルクリックすればOK。
gitコマンドだと、git checkout masterでさっきの状態に戻せる。
GitHubの他人の公開リモートリポジトリを自分のGitHubアカウントにコピーする(Forkする)
GitHubにログインしてから、該当のリモートリポジトリのところに行って、画面右側の「Fork」をクリックすると、自動的に自分のリポジトリにコピーされる(便利!)
リモートリポジトリをクローンする
CodeをクリックするとリモートリポジトリのURLが表示されるのでコピー
SourceTreeのファイル > 新規 /クローンを作成する
SourceTreeのCloneタブを選択して、GitHubのリモートリポジトリのURLとクローンしたい自分のフォルダパスを入力して「クローン」
Gitコマンドでcloneする場合は、クローンしたい自分のフォルダの下で下記コマンドを打つ
git clone [リモートリポジトリのURL.git]
ブランチを新規作成する
SourceTree:ブランチマークをクリック > ブランチ名を入力して「ブランチを作成」
新しいブランチができて、今はそこにチェックアウトしている状態(ブランチ名が太字になっていて左側に〇がついている)
Gitコマンドでbranchを新規作成する場合は、ブランチができるだけで新しいブランチへのチェックアウトはされない
git branch [新規作成するブランチ名] git branch # ブランチの確認 * master newbranch
SourceTreeと同じような状態にしたいので、新規作成したブランチへチェックアウトする
git checkout newbranch # Switched to branch 'newbranch' git branch master * newbranch
新規作成したブランチでファイルに変更を加える
ファイルを変更したら、ステージング → コミットする
※ファイルだけ変更しても、commitしないと意味ないよ!(当たり前だけど・・・)
ここまで出来たら、masterにチェックアウトしても、新しいブランチで入れた変更が入っていないことが確認できる。
この辺でようやくGitがすごいな~って思い始めるww
ブランチの変更をマージする
マージはブランチで変更した内容を反映させること。
今回の場合は、新しいブランチのファイルを変更したので、その変更をmasterに反映させるためにマージする。
SourceTree:masterにチェックアウトした状態で、新しいブランチを右クリック >
masterに反映されたことがわかる
Gitコマンドの場合も同様で、masterにチェックアウトされていることを確認したうえで、mergeコマンドでマージする
git branch # チェックアウトの確認 * master newbranch git merge [マージしたいブランチ名] # masterにブランチの変更をマージ Updating 0c3251c..38fe027 Fast-forward member.html | 1 + 1 file changed, 1 insertion(+)
変更内容をリモートリポジトリにプッシュする
SourceTree:プッシュを押して、ブランチを選択して「プッシュ」
GitHubのユーザー名とパスワードを入力すればPushされる
コマンドの場合は、push実行前にまずは実行内容を確認して、どこからどこにpushするのかを明確にしておく
git push -n # pushの実行内容を確認する(実行はしない) To https://github.com/cataws/[プロジェクト名].git # 送信先となるリモートリポジトリ 0c3251c..7349feb master -> master # 送信内容 git push # 問題なければ実際にpushする Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Delta compression using up to 16 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 400 bytes | 400.00 KiB/s, done. Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (2/2), completed with 2 local objects. To https://github.com/cataws/mao-seminar.git 0c3251c..7349feb master -> master