Gitの使い方を忘れてしまっていたので、復習。
用語解説
- ローカル:自分のPC
- リポジトリ:履歴に関するデータを保管している場所
- ローカルリポジトリ:自分のPCにある、履歴データの保管場所
- リモートリポジトリ:専用のサーバに配置して、複数人でファイルを共有するためのリポジトリ。ここではGitHubのリポジトリを指す。
- ワークツリー:ファイルを編集する作業場。PCでコード編集していた場合、そこのことを指す。
- インデックス:コミットするためのファイルを登録しておくためのスペース
Gitはどうやってファイルを管理しているのか?
- Gitの目的は、変更履歴をたどれるようにすること
- スナップショット(その時点の状態を、そのまま丸ごと保存したもの)で保存している
コミットするまでの手順
git init
してからコミットするまでの手順。
全体の流れ
# Gitに必要なファイルすべてを自動生成する $ git init # 変更をステージに追加する $ git add # 変更を記録する = コミットする $ git commit # ファイルの現在の変更状況を確認する $ git status
1. git init
- 実行は、ステージにあげたいディレクトリの直下で行う。
例:sinatraメモアプリのコードをコミットしたいなら、/rubybook/sinatra_practice/
で実行。 - 何が起きるか?:Gitに必要なファイル(
.git
ディレクトリ)の全てが、このコマンドを実行したディレクトリの直下に自動生成される。
# /users/<ユーザー名>/rubybook/indexで実行 $ git init Initialized empty Git repository in /Users/<ユーザー名>/rubybook/index/.git/ #=> 成功 # ls -aでファイルができているか確認 $ ls -a ./ ../ .git/ index.html #=>.git/ができている #.git/下に、Gitに必要なファイル全てが入っている $ ls .git/ HEAD config description hooks/ info/ objects/ refs/
2. git add
- 何が起きるか?:変更をステージに追加する
# 今いるディレクトリ直下のファイル&ディレクトリ全てをステージに追加する $ git add. # ファイルやディレクトリを指定することもできる $ git add <ファイル名> $ git add <ディレクトリ名>
そもそもステージは何のためにあるか?
一部の変更だけをコミットしたい時、ワークツリーからステージにコミットしたい部分だけをステージにあげて、コミットするため。
3. git commit
- 何が起きるか?:変更を記録する = コミットする
※git addでは、変更をステージに登録しただけで、まだ記録はされていない
$ git commit #=> [master (root-commit) 81fa678] initial commit 1 file changed, 1 insertion(+) create mode 100644 <コミットしたファイル> # コミットメッセージを一緒に入力する $ git commit -m "<メッセージ>"
- これでコミットは完了。
git status でファイルの変更状況を確認
git add
やgit commit
する前に、どのファイルをadd&commitすべきか確認すべき。→git status
でファイルの変更状況を確認する。- ワークツリーとステージ間の変更状況、ステージとリポジトリ間の変更状況の、2つの情報を教えてくれる。
ワークツリーとステージ間
- 前回ステージに追加=
git add
してから、ワークツリーのファイルに変更があるかどうか、を教えてくれる。 git status
したときに、Changes not staged for commit:
:前回addされてからワークツリーに変更があって、それをまだgit addしてないよ!といっている。
ステージとリポジトリ間
- 前回コミット=
git commit
してから、ステージに新しく追加された=git add
されたファイルがあるかどうか、を教えてくれる。 git status
したときにChanges to be committed:
:ステージに追加されているけど、まだコミットしてない変更があるよ!といっている。
例
実際にgit status
の結果がどうなっているか見てみる。
1.git commit
までしたファイルを編集して変更を加える
2.その後git statusで確認
$ git status #=> On branch master Changes not staged for commit: #ステージに追加されてない変更があるよ! (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: index.html #$index.htmlに変更があったよ! no changes added to commit (use "git add" and/or "git commit -a")
3.git add
してもう一度git status
を確認
$ git add . $ git status #=> On branch master Changes to be committed: #ステージに追加されているけど、まだコミットしてない変更があるよ! (use "git restore --staged <file>..." to unstage) modified: index.html #該当するファイルはindex.html
4.git commit
した後、git status
を確認
$ git status #=> On branch master nothing to commit, working tree clean #コミットしてないファイルはありません
GitHubへアップロードする
コミットしてからGitHubへアップするまでの手順
1.GitHub上で、保存したいリモートリポジトリを新規作成する。
- すでにアップしたいリポジトリがあるならこの作業は不要。
- 作成方法は以下のGithub Docsに載っている。
リポジトリを作成する
2.アップする度に毎回リモートリポジトリのURLを指定するのは大変なので、ショートカットを作成する
$ git remote add origin <リモートリポジトリのURL>
これで、originというショートカットでアップできる。
作成したショートカットの一覧確認と削除は以下のコマンドでできる。
# 作成したショートカットの一覧 $ git remote -v # ショートカットの削除 $ git remote rm <ショートカット>
3.リモートリポジトリ(GitHub)へコミットしたファイルを送信する
git push <リモートリポジトリのショートカット名> <pushしたいローカルブランチ名>
# 例:originというショートカットに、mainブランチをpushする
git push origin main
- ブランチが何かについては後で説明。
ブランチを作成してmainブランチにプルリクエストを送る
ブランチとは
- ブランチとは、一つのプロジェクトから分岐させることにより、プロジェクト本体に影響を与えずに開発を行える機能のこと。並行で複数の機能を開発するために使う。
- メリット:ブランチを作ることで、他の人の変更の影響を受けないですむ。
- mainブランチ(旧:masterブランチ)はリリース用のブランチとし、開発はトピックごとにブランチを作って進める。
mainブランチで開発してしまうと、リリースしているコードがどれか分からなくなったり、一個前のリリースに戻れなくなってしまう。
→そのため、ブランチを切って開発し、最終的にリリース用のmainブランチへマージする(コードを取り込む)という流れで開発を進める。
プルリクエストとは
- プルリクエストとは:自分の変更したコードをリポジトリに取り込んでもらえるように、依頼すること。
- 課題提出で、「READMEだけmainブランチにpushして、それ以外のファイルを開発用ブランチに保管してプルリクエストを送る」と指定があったのは、最終的には完成したコードをmainブランチに取り込むため。だからmainとは別に開発用のブランチを作る。
手順
1. ブランチを新規作成
# ブランチを新規作成 $ git branch <ブランチ名> # 作ったブランチの一覧確認 $ git branch # リモートブランチも表示 git branch -a
- このコマンドは、作成をするだけで、切り替えはしない!
2. ブランチの切り替え
# 切り替え $ git checkout <行きたいブランチ名> # 作成してそのまま切り替えたい $ git checkout -b <新規作成するブランチ名>
3. プルリクエストを送りたいファイルをgit add & git commit する
- 作成したブランチに切り替える前に、絶対add&commitしない!
4. GitHubへpushする
$ git push <リモートリポジトリのショートカット名> <pushしたいローカルのブランチ名>
5. GitHub上でプルリクエストを作成する
ここからはターミナルではなく、GitHub上で操作する。
1.リモートリポジトリのPull requests
をクリック
2.New pull request
ボタンをクリック
3.baseには取り込み先のブランチ(main)、compareには取り込んでほしい元のブランチを指定。
4.pull request
をクリック
タイトルとメッセージを入力してcreate
をクリック
(Revieweresでレビュワーを指定できるが、今回はしない)