はじめに
必須スキルとなっているgit・gitHubの基礎についてまとめました。今回は「ローカルからリモートリポジトリにpushするまでの流れ」・「変更を取り消す方法」・「クローンの生成方法」を記述しています。初学者向けの内容ですが、ローカルの構造が分かっていない方には少し不親切な説明になっているかもしれません。
コマンドはコピペしやすいように、$
をあえてつけていません。
全3回に渡って、下記の計画で進めます。
【計画】
第1回目 git基礎コマンド(今回)
第2回目 ブランチ・マージ・リベース・コンフリクト(https://qiita.com/tatsuya_1995/items/04148896a7f23a1f2090)
第3回目 プルリクエスト (https://qiita.com/tatsuya_1995/items/6d48b7ba8487fe38bbf8)
※沢山出回っている記事ですので、あくまでも自分用メモです。
gitのローカル基本構造
ローカルは3つのエリアに分かれる
- ワークツリー(ファイルを変更する作業場所)
- ステージ(コミットする変更を準備)
- ローカルリポジトリ(スナップショットを記録)
ローカルリポジトリの新規作成
初めに、.gitディレクトリ
を生成。
git init
Initialized empty Git repository in ○○○○○○
と表示されればOK!
.gitディレクトリはリポジトリやインデックスファイル、設定ファイルが作られる。
この中にgit add .
やgit commit
などのコマンドで作成されるファイルはこの中に保存される。
リモートリポジトリ(GitHub)へpushする流れ
ワークツリーからステージへ追加
git add .
ステージからローカルリポジトリへコミット
git commit
誰がいつ何の変更したかの記録を残すため重要。
※git commit -m "<メッセージ>"
とオプションをつけることでエディタを立ち上げずにコミットできる。
ローカルリポジトリからリモートリポジトリへプッシュ
GitHubでリモートリポジトリを作成
GitHub→Your profile→Repositories→New→Repository nameを入力→Create repositoryの流れ。
そのURLをコピー
リモートリポジトリ(GitHub)を新規追加
originというショートカットでURLのリモートリポジトリを登録
URLはGitHub上で作成したもの。
git remote add origin https://github.com/*****.git
origin:
直訳は「起源、発端、源」。デフォルトのリポジトリの場所(URL)の別名
リモートリポジトリ(GitHub)へプッシュ
git push -u <リモート名> <ブランチ名>
git push -u origin master
-u
オプションをつけておくと、次回以降git push
のみでpushできる。
GitHubのリモートリポジトリを確認すると、リモートリポジトリにpushできていることができる。
現在の状態のファイルの状態を確認
git status
ワークツリ⇄ステージ⇄リポジトリ間で変更されたファイルを、それぞれ確認することができる。
コミットやステージに追加する前にどのファイルが変更されたかを確認する癖を付ける。
→全てのファイルをコミットすると、変更途中の物までコミットしてしまうリスクがある。どれをコミットするのか確認した方が安全。
この図はstageに追加していないindex.htmlがあるという意。
git add .
した後、git commit
をすると、ローカルリポジトリまで行っているので表示は出なくなる。
変更の履歴を確認
git log
変更履歴のオプション
1行で表示する
git log --oneline
ファイルを指定して変更差分を表示する
git log -p <ファイル名>
表示するコミット数を指示する
git log -n <コミット数>
ファイルの削除方法
ファイルを削除するだけではなく「ファイルを削除する記録を残す」という意。
ファイルごと記録もを削除
- リポジトリにコミットした記録が消える
- ワークツリーからファイルが消える
git rm <ファイル名>
git rm -r <ディレクトリ名>
ファイルとディレクトリの違い
・ファイル:コンピュータ上で記録・管理される情報の単位
・ディレクトリ:ファイルの目的や種類などに応じて整理するための「入れ物」。ディレクトリはファイルとディレクトリの両方を格納できる。
参考:http://www.cc.kyoto-su.ac.jp/~hirai/text/files.html
ワークツリーにファイルは残して、リポジトリの記録だけ削除
git rm --cashed <ファイル名>
git rm
コマンド後、元の状態に戻す
git reset HEAD <ファイル名>
git checkout <ファイル名>
##バージョン管理しないファイルの取り扱い
パスワードなどの公開したくないファイルは.gitignore
ファイルに指定する
.gitignoreファイルを生成
touch .gitignore
.gitignoreファイルに、公開しないファイル名を記述
.gitignore
ファイルに、公開したくないファイル名を記述するとバージョン管理から除外される。(今回はsecret.html
)
ワークツリーのファイルを元の状態に戻す
正確には、「指示されたファイルやディレクトリの情報をステージから持ってきて、ワークツリーに反映させる」。
ファイル名やディレクトリ名を指示して元に戻す
git checkout -- <ファイル名>
git checkout -- <ディレクトリ名>
addした全変更を元に戻す
git checkout -- .
※ピリオドは全ファイルの意味
ステージのファイルを元の状態に戻す
正確には、「指示されたファイルやディレクトリの情報をリポジトリから持ってきて、ステージに反映させる」。
→最新のコミットの情報でステージの情報を上書きする。ステージから取り消すだけなので、ワークツリーには影響を与えない。
ファイル名やディレクトリ名を指示して元に戻す
git reset HEAD <ファイル名>
git reset HEAD <ディレクトリ名>
commitした全変更を元に戻す
git reset HEAD .
直前のコミットをやり直す
現在のステージの情報を元に、直前のコミットの情報を上書きする。
git commit --amend
リモートリポジトリにpushしたコミットは修正NG。
リモートリポジトリにpushした内容を修正し、--amend
で上書きすると、その間にもし他の人が直前のコミット情報を元に内容を変更し、統合しようとした場合に別のファイルと認識されてしまう。
GitHubからコピー(クローン)を生成する方法
git clone <リポジトリ名>
<リポジトリ名>はGitHub上のリポジトリのCodeタブにあるURL。これをコピーして貼り付ける。
これによって、リモートリポジトリ(GitHub)から以下の2つが行われる。
- リモートリポジトリのファイルをワークツリーへコピー
- .gitディレクトリをコピー
設定しているリモートリポジトリを表示
git remote
git remote -v
-v
オプションは下記のように詳細を表示する。
fetchとpushでURLを切り替えることができる。この例では同じURLで表示。
リモートリポジトリを新規追加
git remote add <リモート名> <リモートURL>
リモートリポジトリの名前を変更
git remote rename <旧リモート名> <新リモート名>
git remote rename old_name new_name //例
リモートリポジトリを削除
git remote rm <リモート名>
最後に
今回はgitの基礎コマンドについてまとめました。次回はブランチやマージについてまとめます。
(もしこの記事に誤りがありましたらご教授いただけると幸いです。)