個人的リマインド用
基礎
Gitはスナップショットを記録する
→ファイルが変更されたときは、差分を保存するのではなくまるまる保存する
(理由はブランチとか使う時に差分の計算がいらないから早くなる)
ローカル(自分のPC)でスナップショットを記録→Githubへアップ
ワークツリー(作業場)でスナップショットを記録
→ローカルリポジトリ(自分のPC)へ保存
→Github(リモートリポジトリへ保存)
逆に他の人の作業を自分のとこに反映させたい時
Github(リモートリポジトリ)
→ローカルリポジトリ(自分のPC)でGithubの記録を取得
→ワークツリー(作業場)でGithubの記録を反映
ローカルは3つのエリアに分かれている(下から上へ)
(リポジトリ)git commitで追加
スナップショットを記録する場所
(ステージ)git addで追加
コミットする変更を準備する場所
※コミットとはスナップショットの記録のこと
なぜこんなことをするのか
→手元には変更したファイルと、変更してないファイルがある場合もある
そんな時変更した分だけをリポジトリに記録できるように
(ワークツリー)
ファイルを変更する作業場
ギットのデータの持ち方(コミットまでの流れ)
index.htmlがワークツリーにある
→圧縮ファイルA(index.html)のファイル内容を圧縮(まずリポジトリにおかれる)
→インデックス(index.html 圧縮ファイルA)がステージに保存される
ここまでがgit addで起こっていること
→インデックスからツリー1(ファイル構成を表したファイル)を作成(リポジトリに置かれる)
→ツリー1からコミット1(ツリー名、作成者、日付、コミットメッセージ)を作成
現在リポジトリには圧縮ファイルA、ツリー1、コミット1の3つがある
次に2つ目のファイル(home.css)をコミットしようとする時
→全体の流れは上と同じだがコミット2を作成する際に、コミット1も記録する
(変更履歴を辿れるように)
index.htmlを変更した時
→圧縮ファイルCを作成(変更していないcssファイルは圧縮しない)
→インデックスの段階で圧縮ファイルAから圧縮ファイルCに変更
→それにともないツリー3にもその記録が保存される
→コミット3ではツリー3と親コミット2も記録
→Gitオブジェクト、圧縮ファイル、ツリーファイル、コミットファイル、ツリーファイルのインストール方についてはudemyから
gitを始める
ローカルリポジトリの新規作成
git init
→.gitディレクトリが作成される
(リポジトリ、圧縮ファイル、ツリーファイル、コミットファイル、インデックスファイル、設定ファイル)
objectsの中に色々入ってくる
Gitリポジトリのコピーを作成する
git clone <リポジトリ名> クローン(コピー)を作成される
他の人のコードをコピーする
リモートリポジトリのコピーがワークツリーにコピーされる
.gitディレクトリがコピーされる
変更をステージに追加する
git add <ファイル名>
git add <ディレクトリ名>
git add .
変更を記録する(コミット)
git commit
git commit -m "メッセージ"
git commit -v ファイルにどんな変更をしたかエディター上で確認できる
何を記録するか:変更、新規作成、削除、複数ファイルの変更・作成・削除
簡単に書くときはわかりやすくコミットメッセージを書く(大体1行で)
正式に書くときは一行目に変更内容の要約、2行目に空行、3行目に変更した理由
おまけ
vim/vi 怖い
iを1回押せば入力モードに
→文字入力したらすかさずesc
→:wqで保存終了、:q!で保存せず終了
現在の変更状況を確認する
git status
ワークツリーとステージの間で変更されたファイル、リポジトリとステージの間で変更されたファイルがわかる
変更差分を確認する
git addする前の変更分
git diff <ファイル名>
git addした後の変更分
git diff --staged
変更履歴を確認する
git log
1行で表示する
git log --oneline
ファイルの変更差分を表示する
git log -p index.html
表示するコミット数を制限する
git log -n <コミット数>
ファイルの削除を記録する
ファイルごと削除
git rm <ファイル名>
git rm -r <ディレクトリ名>
ワークツリーにファイルを残したい(gitの記録だけ消したい)とき
git rm -cached <ファイル名>
ファイルの移動を記録する
git mv <旧ファイル> <新ファイル>
以下のコマンドと同じ
mv <旧ファイル> <新ファイル>
git rm <旧ファイル>
git add <新ファイル>
リモートリポジトリ(GitHub)を新規追加する
git remote add origin
https://github~(githubのURL)
(意味)originというショートカットでURLのリモートリポジトリを登録する
毎回URLを書く必要がなくなりoriginでよくなる
リモートリポジトリ(GitHub)へ送信する
git push <リモート名> <ブランチ名>
git push origin master
git push -u origin master 次回以降origin masterをpushする時にgit pushだけで良くなる
ローカルリポジトリの内容をリモートリポジトリに送ることを「プッシュ」という
コマンドにエイリアスをつける
git config --global alias.ci commit コミットをciに
git config --global alias.st status statusをstに
git config --global alias.br branch branchをbrに
git config --global alias.co checkout checkoutをcoに
--globalをつけるとPC全体の設定になる
project/.git/configというローカルリポジトリに格納
管理しないファイルをGitの管理から外す
管理したくないファイル
・パスワードなどの秘密情報が記載されたファイル
・チームの開発で必要ではないファイル
どうやってやるの?
.gitignoreファイルに指定する
.gitignoreファイルの書き方
指定したファイルを除外
index.html
ルートディレクトリを指定
/root.html (一番てっぺんのディレクトリ)
ディレクトリ以下を除外
dir/
/以外の文字列にマッチ
/*/*.css (1つ下の階層にある任意のcssファイル)