Gitのデータをどうやって管理しているか
Gitは圧縮ファイルをスナップショットで記憶していく。(変更したファイルの差分を記憶する形ではない。)
スナップショットとして記憶することで、バグが起きた時など以前の状態に戻すことが容易である。
ローカルリポジトリは3つのエリアに分かれてる
①ワークツリー(手元の作業場) ここでファイルを変更する。 変更したいファイルだけステージに上げる。(git addコマンド)
②ステージ コミット(スナップショットを記録する)の準備の場所
③ローカルリポジトリ スナップショットとして「圧縮データ」「ツリー」「コミット」ファイルを記録する。(git addコマンド)
ブランチについて
複数人が並行して機能開発するためにあるのがブランチ。
他の人の開発の影響を受けないのがブランチの利点である。
開発、コードを変更(どんどんコミットを重ねる)中で、コミットが枝分かれしていく。
ブランチは枝そのものではなくて、コミットについたタグ(ラベル)であり、コミットIDを指し示すポインタ。
HEADとは今自分が作業中のブランチへのポインタ。
ブランチを利用していく上で、基本的な考え方
masterブランチはリリース用ブランチ
トピック毎ブランチは開発用ブランチ
として進めるのが基本、masterブランチは常にリリースしているものと同じにする。
プルリクエストについて
自分の変更した内容を相手のリポジトリに取り込んでもらえるように依頼する機能
リベースについて
変更を統合する際に、履歴をきれいに整える。
他のブランチでの変更分を自分のブランチに取り込みながら履歴を整えることができる。(fast forward)
git rebase <ブランチ名>
リベースとマージの違い
どちらも枝分かれしたコミットを取り込む動作。
違いは取り込んだ履歴が枝分かれするのか?一直線なのか?の違い。
リベース(作業の履歴を残しときはこっち)
・コンフリクトの解決が比較的複雑になる
・履歴が理解しやすい
マージ(履歴を残さなくてもいい、履歴をきれいにしたのはこっち)
・コンフリクトの解決が比較的簡単
・履歴が複雑化しやすい
注意:GitHubにプッシュしたコミットをリベースしてはいけない。
一つの考え方として、
プッシュしていないローカルの変更には、リベースをする。
プッシュした後は、マージをする。
(コンフリクトしそうならマージ )
スタッシュコマンド(stash:へそくり)とは
今している作業を辞めて、違う作業をしなくてはならなくなった時、
今している作業の変更分を一時避難させることができる。
後で呼び戻すことができる。
Git Hubを使ったリモートリポジトリとのやりとり
git remote add origin <URL> originというショートカット名で、<URL>のリモートリポジトリを登録する rmで削除しても、
リモートの情報を詳しく知りたい時
git remote show <リモート名> git remote show origin
リモートを名を変更
git remote rename <旧リモート名> <新リモート名> git remote rename old_name new_name
リモートリポジトリとの接続を削除(解除)
git remote rm <リモート名> git remote rm origin