はじめに
gitのコマンドについて、自分の理解度を確認する意味も含めて、まとめたいと思います。
git初心者のため、内容に誤りや補足事項等ございましたら、お気軽にご指摘お願いします。
リポジトリ作成からコミットするまで
1. リポジトリを初期化する
リポジトリ(repository)とは、ソースコードや変更履歴、コメントなどを一括して保管する場所のこと。
リポジトリには、自分のPC上に作る「ローカルリポジトリ」と、GithubなどのWebサービス上に作る「リモートリポジトリ」がある。
まず、ローカルリポジトリを初期化(initialize)する。
必ずとも実行が必須ではないが、実行する癖をつけておくと良い。
$git init
2. プロジェクトのファイルをステージングエリアに追加する。
ファイルに何かしらの変更を加えたら、まずはそのファイルをステージングエリアへ追加する。
ステージングエリアとは、リポジトリにコミットするファイルを、一時的に置いておくためのエリアのこと。
基本的に、git addするときは常に-A
オプションをつけるようにする。
-A : untracked状態のファイルをすべてステージングエリアに追加するオプション
ただし、.gitignore
に記載されているパターンにファイル名がマッチする場合、
そのファイルは追加されない。
$git add -A
3. ステージングエリアのファイルをローカルリポジトリに反映させる(コミットする)
変更したファイルを一旦ステージングエリアに追加後、自身のローカルリポジトリに変更を反映させる。
-m
フラグを使うと、コミットメッセージをコマンドラインで直接指定できる。
$git commit -m "コメント”
4. リモートレポジトリ(github)に変更を反映させる
自身のローカルリポジトリの変更を、リモートリポジトリへ反映させる。
最初のコマンドは、GithubをリポジトリのoriginとしてGitの設定ファイルに追加するためのもの。
実行する前に、予めGithubでリポジトリを作成しておく必要があり、
リポジトリを作成した後、最初の1回のみ、このコマンドを実行する必要がある。
次のコマンドで、ローカルのリポジトリをリモートのoriginにプッシュしている。
2回目以降は、git push
でコミットできる。
git remote add origin https://github.com/<Githubのアカウント名>/<リポジトリ名>.git
git push -u origin master
以上がローカルリポジトリを作成してから、リモートリポジトリにプッシュするまでの一連の流れとなる。
2回目以降は、git add -A
から始めればよい。
branchを作成してからプッシュするまで
1. branch(ブランチ)を作成する
branchとは、元のリポジトリのコピーを作成し、元のファイルを変更せず、プログラムの編集や追加を行うことができる機能のこと。
ここでは、ローカルリポジトリのmasterブランチ
からtestブランチ
を作成し、
リモートリポジトリにプッシュするまでをやってみる。
方法1では、最初のコマンドで指定の名前のブランチを作成する。その後、指定したブランチに移動する。
方法2では、git checkout -b ブランチ名
を用いることで、新しくブランチを作成し、そのブランチへ移動することを同時に行う。
方法1
$git branch test
$git checkout test
方法2
$git checkout -b test
2. 全てのローカルブランチを一覧表示する
現在のローカルリポジトリの全てのブランチを表示させる。
*がついているブランチが、現在使用中のブランチであることを表します。
$git branch
* test
master
ブランチが切り替わっていることを確認したので、作業を実施する。
今回は、testブランチでREADME.mdを変更してみました。
3. ブランチの状態を確認する
変更が加えられたファイルを表示する。
$git status
On branch test
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: README.md
no changes added to commit (use "git add" and/or "git commit -a")
4. 変更点を確認する
編集した箇所と直前にコミットした内容の差分を表示する。
$git diff
diff --git a/README.md b/README.md
index 7f6ced6..c20cc1c 100644
--- a/README.md
+++ b/README.md
~途中省略~
(END)
5. 変更点をローカルリポジトリにコミットする
変更に問題なければ、コミットする。
その際、git add -A
&git commit -m "コメント"
でコミットしても良いが、
git commit
には、現存する全てのファイルの変更点を一括でコミットする-a
オプションがある。
今回はこれを使って、コミットしてみる。
ただし、最後にコミットした後に新しくファイルを追加した場合は、
git add
でバージョン管理下に置く必要がある。
$git commit -a -m "Improve the README file"
6. リモートリポジトリにプッシュする
コミットした内容を、Githubへプッシュする。
共同開発の場合、masterを不用意に変更しない方がいいため、
リモートリポジトリのtestブランチ
へプッシュします。
$git push origin test
以上がローカルリポジトリでブランチを作成し、リモートリポジトリにプッシュするまで一連の流れになる。
リモートリポジトリのmasterへプッシュするまで
1. リモートリポジトとローカルリポジトリを同期する
共同開発している場合、リモートリポジトリが共通で使われるため、
自分が作業中に他の人がリモートリポジトリのmasterブランチを更新している可能性がある。
そのため、リモートリポジトリのmasterブランチとローカルリポジトリのmasterブランチを同期し、
ローカルリポジトリのmasterを最新の状態にしておく必要がある。
方法1では、git fetch
でリモートリポジトリのmasterブランチの最新状態を取得して、
git merge
で取得した状態をローカルリポジトリのmasterブランチに反映させる。
なお、方法2のgit pull
は、git fetch
とgit merge
を同時に行ってくれるが、
予期せぬ動作をする可能性もあるため、初心者は分けて行うのが良いかも。
$git checkout master
方法1
$git fetch origin master
$git merge origin/master
方法2
$git pull origin master
(追記)ここでgit merge
でローカルリポジトリのmasterを更新した場合、commitする。
commitし忘れると、エラーが発生してmergeに失敗する。
E325: ATTENTION
Found a swap file by the name ...
2. ブランチで変更した内容を、masterに反映させる
ブランチで変更した内容をmasterブランチにmergeする。
$git merge test
3. ブランチを削除する
mergeした後、ブランチが不要になった場合には、ブランチを削除する。削除が必須ではない。
また、ブランチの変更を保存せず、ブランチごと削除するには、git branch -D ブランチ名
を用いる。
$git branch -d test
4. リモートリポジトリへプッシュする
ローカルリポジトリのmasterブランチの内容をリモートブランチにプッシュする。
$git push
以上、リモートリポジトリのmasterへプッシュするまでの一連の流れになります。
参考
Ruby on Rails チュートリアル
https://qiita.com/yukibe/items/9ef9d54f2e7d53cfb51c
https://git-scm.com/book/ja/v2