##概要
Git基礎について、覚えておいたほうが良い事柄をまとめる
前回Git基礎として第1弾を投稿したので、引き続き。
##記事の参考リンク
いつやるの?Git入門
##ワークツリー、ステージングエリア、ローカルリポジトリについて
###それぞれ用語解説
・ワークツリー
ローカルに作成する、Gitで管理したい作業ディレクトリのこと
実際に自身が変更や追加を行うファイル
・ステージングエリア
Git initで作成される.gitのディレクトリの中のindexファイルのこと
ここにワークツリーからaddされたファイルが一時保存される
・Gitリポジトリ(ローカルリポジトリ)
ステージングエリアにステージされている差分をcommitすることで保存される保存領域
commitIDが付く
前のcommitが親となることで、前回のcommitをたどることができる
###それぞれの領域での操作
・ステージングエリアをGitリポジトリの状態に戻す
git reset HEAD(※1)
※1
Gitリポジトリが見ている最新のcommit位置のことを表す
HEADが格納しているのはブランチのポインタである
ブランチはコミットの場所を記憶している
つまりHEADはポインタのポインタともいえる
参考:GitのHEADとは何者なのか
・ワークツリーをステージングエリアの状態に戻す
git checkout --
・ステージングエリアの内容を確認する
git ls-files
・ステージングエリアとローカルブランチの差分を確認
git diff --staged
ShareSlideの101ページの画像を貼る
これら3つの関係と操作が分かりやすくまとめられていた
###その他基本コマンド
・ファイルやディレクトリを移動させる
コマンド例:git mv *.txt move/
カレントディレクトリのtxtファイルをmoveディレクトリ直下に移動する
git moveとせずにmvコマンドだけでやってしまうと別ファイルとして扱われるため、それまでのログが途切れてしまう
参考:ファイルを移動する
・データ領域を指定commitの状態に戻す
git reset --
コマンド例:git reset --hard HEAD
ひとつ前のcommitの状態に戻す
・ワークツリーの状態を確認する
コマンド例:git status
・コミットログを確認する
コマンド例:git log
表示するコミット数(-n コミット数)
ファイルを指定してコミットログを確認する()
ワンラインでログを表示する等のオプションがある(--oneline)
等のオプションがある
参考:git log の使い方とオプション一覧(コミット履歴を確認する)
・最新のCommit情報を表示する
コマンド例:git show、git log -1
##ブランチ
###ブランチについて
・GitではTrunk(幹)なるものがなく、すべてブランチである
・デフォルトでmasterブランチが用意されるので、便宜的にこれがTrunkのように扱われるだけ
・ブランチはコミットの位置をさす
・あくまでポインタという意味合いでブランチという言葉は定義されている
・コミットオブジェクトには以下情報が格納される
1.ツリーオブジェクトへのポインタ
2.親コミットのポインタ
3.コミッターのメタ情報
4.コミットメッセージ
・上記が数珠つなぎのようになってGitツリーは形成されている
参考:GitのHEADとは何者なのか
masterからブランチを作成すると同じ位置をさすブランチが作成される
masterでコミットするとmasterブランチだけコミット位置が変わる
・トピックブランチのコミットをmasterにマージするとき
そのマージコミットについてはmaster側とトピックブランチの前のコミット両方を親に持つことになる
・トピックブランチをリベースするとき
masterとの共通の先祖に移動する
masterのHEADまでのdiffを取得
取得したdiffをmasterに適用して新しくcommitを作成する(この時点で元のトピックブランチのcommitは消える)
★元のトピックブランチがなくなる分、トピックブランチでの変更を追いづらくなるためあまり過度に使用するのはよくない
conflictがあれば対応
###操作
・gitのブランチ作成
コマンド例:git branch develop
masterのブランチから新しくdevelopブランチを作成する
・作業中のブランチを切り替える
コマンド例:git checkout
HEADの位置が変わる
その結果、ステージングエリアとワークツリーがHEADに合わせて復元される
・上二つの合わせ技
コマンド例:git branch -b
・現在対象となっているブランチに指定のブランチをマージする
コマンド例:git merge develop
developとmaster共通のマージコミットが作成される
コンフリクトがある場合は解消する必要がある
・現在のブランチを指定ブランチからリベースする
コマンド例:git rebase master
現在対象となっているブランチがdevelopとする
masterの最新commitにdevelopのブランチがrebaseされる
この結果、元のcommit(便宜的にEとでもおいておく)がcommit:E'というそもそものcommitとは異なるものになる
##リモートリポジトリ
・リモートブランチ
リモートの状態をさすブランチ
cloneやpullしてきた段階のリモートリポジトリのブランチをさす
同名のローカルブランチもできる
・ローカルブランチをリモートリポジトリと合わせる
pull = fetch + merge/rebaseとなる
git pullをすればリモートブランチもローカルブランチも同時に更新できる
・ローカルリポジトリとリモートリポジトリが同時に更新されていた場合(重要)
1.一度ローカルリポジトリ側でリモートリポジトリの内容をマージする
2.マージコミットをPushしてリモートリポジトリに反映する
リモートリポジトリが頻繁に更新されるような場合はほとんどこの操作をする必要が出てくると思う
リモートブランチの内容がリモートリポジトリのブランチとずれている可能性が高いため