【Gitの基本】
はじめまして!ケンチキと申します。
人生逆転サロン内にてWebアプリケーション開発を学んでいます。
アラサーからエンジニア転職に成功したあじーさんの影響を受け、学習記録をブログやTwitterで発信していくことを決意しました。
学習したことを毎日、わかりやすくまとめていきたいと思います。
【本日の学習内容:Gitの基本】
GitHub(リモートリポジトリ)にプッシュするまでの流れ
ワーキングツリー→インデックス(ステージングエリア)→ローカルリポジトリ→リモートリポジトリ
✅ローカルリポジトリを作る(git init)
(バージョン管理の開始)
cdコマンドでローカルリポジトリを作成したいディレクトリに移動し、git initコマンドを実行することで、ローカルリポジトリを作る。
kenchiki@kenchikinoMBP hello % git init
Initialized empty Git repository (gitリポジトリが作られましたよー) in/Users/kenchiki/Desktop/jinsei_gyakuten/hello/.git/
kenchiki@kenchikinoMBP hello % ls
hello.html
lsで.gitディレクトリが確認できなかったのはなぜだろう、、
✅新規作成、変更したファイルをインデックス(ステージングエリア)に登録する(git add .)
git init コマンド実行後、git add . コマンドを実行し、新規作成、変更したファイルをインデックス(ステージングエリア)に登録する。
このコマンドは、現在開発しているプロジェクトの中で変更があったファイルを見つけてインデックスに登録、変更履歴を保存するための準備をしてくれる。
kenchiki@kenchikinoMBP hello % git add .
kenchiki@kenchikinoMBP hello % git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .DS_Store
new file: hello.html
登録完了!と思いきや作った記憶のない.DS_Storeファイルとやらがインデックスに登録されているではないか、、
とりあえずググったら不要なファイルということが判明したので削除🚮
また、きちんとインデックスに登録されていないと、緑字ではなく赤字で表示される。
✅変更履歴を保存する(commit -m "")
変更履歴を保存するために、commitというコマンドを実行。(-mオプションをつけることによって、コミットに対するコメントを残すことができる)
このコマンドを実行すると、ローカルリポジトリの変更内容を保存できる。
kenchiki@kenchikinoMBP hello % git commit -m "add hello to hello.html"
[master (root-commit) 6bdb6e9] add hello to hello.html
1 file changed, 1 insertion(+)
create mode 100644 hello.html
kenchiki@kenchikinoMBP hello %
また、commitを実行する際にはgit addにおいて変更済みのファイルがインデックスにあることが必須。
もし変更済みのファイルがインデックスにない場合は、commitするものが無いというメッセージが表示される。
nothing to commit, working tree clean
コミットするものは何もないよー ワーキングツリーはきれいだよー(変更がないよー)
✅変更前の状態まで戻す(git checkout HEAD^)
git checkout HEAD^コマンドを実行することで、^の個数分前のセーブポイント(変更前の状態)まで戻すことができる。
✅変更前の状態まで戻したものを再度戻す(git branchとgit checkout master)
git checkout HEAD^コマンドを実行することで、^の個数分前のセーブポイント(変更前の状態)まで戻すことができる。
kenchiki@kenchikinoMBP hello % git branch
* (HEAD detached at 6bdb6e9)
master
kenchiki@kenchikinoMBP hello % git checkout master
Previous HEAD position was 6bdb6e9 add hello to hello.html
Switched to branch 'master'
kenchiki@kenchikinoMBP hello %
✅ブランチ
ブランチとは、複数の開発を同時並行して行うために必要な仕組み。
変更履歴の管理を分岐させることによって、各プログラマーで別々の機能を実装する事ができる。「ブランチ」という名前の通り、開発を枝分かれさせるという事。
ブランチは、他のブランチに合体(マージ)させる事で、一つにまとめる事ができる。
masterと呼ばれるブランチが存在し、開発用に分岐させた他のブランチは、最終的にこのmasterにマージさせるというのが、一般的な開発の流れ。
✅ブランチの作成(git branch ブランチ名)
git branch 任意のブランチ名 コマンドを実行することで、その名前で新しいブランチを作る。
✅新しくブランチを作成し切り替える(git checkout -b ブランチ名)
git checkout -b 任意のブランチ名 コマンドを実行することで、その名前で新しいブランチを作ったうえで切り替える。
✅ブランチを切り替える(git checkout ブランチ名)
git checkout ブランチ名 コマンドを実行することで、既存のブランチを切り替える。
✅現在存在するブランチを確認する(git branch)
git branch コマンドを実行することで、現在存在するブランチを確認できる。
*が付いているのが現在のブランチ。
kenchiki@kenchikinoMBP hello % git branch
* add_good_morning
master
kenchiki@kenchikinoMBP hello %
✅ブランチをマージ(合体)する(git checkout masterとgit merge)
マスターに他のブランチをマージ(合体)させる。
(マスターに他のブランチで作った変更内容を反映させる)
まず、git checkout master コマンドを実行することで、マスターブランチを現在のブランチにする。
kenchiki@kenchikinoMBP hello % git checkout master
Switched to branch 'master'
次に、git merge 合体させたいブランチ名 コマンドを実行することで、合体させたいブランチをマスターブランチにマージする。
✅リモートリポジトリを作る
GitHubのサイト内のマイページ(ニックネーム)を開く。
Repositories内のNewボタンを押し、Repository nameを入力する。
PublicかPrivateを選択し、Create repositoryボタンを押すと、リモートリポジトリが作成される。
✅ローカルリポジトリにコミットしたものを、リモートリポジトリにプッシュする
HTTPSを押した時に表示されるURLが、ローカルリポジトリとリモートリポジトリを紐付けるために必要となるので、コピーする。
同じページに記載のある、
git remote add origin URL コマンドと
git push origin master コマンドを
(コミットした内容をリモートリポジトにプッシュする)
実行することで、リモートリポジトリにプッシュが完了する。
※ちなみに、現場では git push origin master コマンドを実行して、いきなりマスターに対してプッシュすることはしないらしい。自分で練習するときだけ実行するコマンドだと認識する。現場では、新しく作ったブランチをマスター以外の他のブランチに対してプッシュする。
✅変更履歴の確認(git log)
git logコマンドを実行することで、どのような変更がされてきたのか確認できる。
kenchiki@kenchikinoMBP hello % git log
commit 6bdb6e9554c96b731f34a1ae33d841521be02e20 (HEAD -> master)
Author: Kenchiki-chiki <kodama303@gmail.com>
Date: Sat Jun 13 10:54:12 2020 +0900
add hello to hello.html
kenchiki@kenchikinoMBP hello %
✅状態の確認(git status)
git statusコマンドを実行することで、ワークツリーという領域で変更・追加した状態のファイルや、インデックスという領域に反映されている状態のファイルを確認することができる。
🗂コミットする予定の変更したファイル
(変更したファイルがインデックスに登録されている状態)
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: hello.html
🗂まだインデックスに追加されていない、変更したファイル
(変更したファイルがインデックスに登録されていない状態)
Changes not staged for commit
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changed in working directory)
modified: hello.html
🗂Git でまだ管理されていないファイル
(新しく作成したばかりのファイル)
Untracked files
(use "git add <file>..." to include in what will be committed)
hello.html
参考:人生逆転サロン教材、https://26gram.com/git-status