03基本的なGitコマンド
ここからは、作成した「git-test」ディレクトリを活用して、基本的なGitコマンドを紹介していきます。
現在の「git-test」ディレクトリの状態は、以下の図のようになります。(※重要)

「git-test」ディレクトリ内のファイルたちが存在する領域を「ワーキングツリー」と呼びます。
そして、変更を反映したい内容を「ステージングエリア」→「ローカルリポジトリ」の順に移動させていきます。
「ステージングエリア」が存在する理由について疑問に思われるかもしれませんが、実はこれが非常に重要です。なぜなら、「ローカルリポジトリ」に変更を一度反映してしまうと、その変更は取り消すことが難しくなるからです。しかし、「ステージングエリア」があることで、変更を直接「ローカルリポジトリ」に反映させる前に、どのファイルを反映させるかを選択することができるのです。この段階で変更を確認し、選択することで、意図せぬ変更が「ローカルリポジトリ」に保存されることを防ぐことができます。
add
ワーキングツリーの状態を、ステージングエリアに反映するためのコマンドです。
// 「file01」をステージする
git add file01
commit
ステージングエリアにのせた変更を、ローカルリポジトリに反映するためのコマンドです。
// ”first commit”というメッセージを付けてコミット
git commit -m "first commit"
※create mode=新しいファイルがローカルリポジトリに作られたよ!
※100644=通常のファイルだよ!(ファイルのパーミッション)

log
logを使うことで、コミットの履歴を確認することができます。先ほどのcommitを確認してみましょう。
// コミット履歴を見る
git log
※7b930913b1664bf1……=コミットを一意に識別するための値(ハッシュ値、SHA-1(シャーワン)とも呼んだりする)
commit履歴はこのような感じで確認できます。
実際にcommitする際は、「なぜそのような変更をしたのか?」というのが分かるようなコミットメッセージを残すことが大事です。
それでは、次に進むために「file01」にもう一行、文字列を追加しましょう。
// 「file01」に2行目の文字列を追加
echo "Git test 2nd string" >> file01status
ここでは現時点でのローカルリポジトリの状況を確認できます。
// 現在のローカルリポジトリの状況を表示
git status
これは「ステージングエリアに反映されていない変更あり」という状態です。
diff
変更内容を確認するには、下記のコマンドを使います。
// ワークツリーとステージングエリアの差分を確認
git diff
追加した文字列が確認できました。
2行目もステージング→コミットしておきましょう。
git add file01
git commit -m "second commit"branch
次は、新しいブランチを作成していきます。まず、今どのようなブランチがあるのか確認しましょう。
// ブランチの一覧表示と、今いるブランチの表示
git branch
現状、「masterブランチのみ」の状態です。
checkout
今いるブランチから、新しいブランチを作成したいときは、下記コマンドを実行します。
// 「branch_a」ブランチを作成する
git checkout -b branch_a

これにより、現在は「branch_a」という名前のブランチが作成され、そのブランチは「master」と同じ状態になりました。
ブランチ間を移動したい場合、先ほどのコマンドで使用した「-b」を省略したコマンドを実行します。
// ブランチを移動する
git checkout master
master→新しいブランチ作成→masterに戻るという流れを実行できました。
ここからは、あるブランチの変更内容を別のブランチに取り込む方法について学んでいきましょう。
現在、各ブランチの状態は以下のようになっています。masterブランチとbranch_aブランチは差異がありません。
次に、branch_aブランチに移動して、ファイルに一行追加する操作を行います。
// branch_aブランチに移動(=branch_aブランチをチェックアウト)
git checkout branch_a
// 「file01」ファイルに文字列を追加
echo "Git test 3rd string" >> file01
// ステージする(これまでは"git add ファイル名"としていたが、
// git add .とすると、ワークツリーの変更点をすべてステージすることができる)
git add .
// コミット
git commit -m "commit to branch_a";
merge
次に、branch_aブランチの変更をmasterブランチに反映します。
// 変更を反映させたいブランチをチェックアウト
git checkout master
// git merge 取り込みたいブランチ名
git merge branch_a
ここまでで、「masterブランチから作成したブランチで作業を行い、変更点をmasterブランチに反映する」ということができるようになりました。
番外編:コンフリクトの解消
大規模なチームでGitを使用して開発を行う際には、必ずと言っていいほど「コンフリクト」が発生することがあります。
「コンフリクト」とは、そのままの意味で言うと「競合」のことです。つまり、異なるブランチ上で同じ行や隣接する行に対して変更が行われた場合に生じます。
コンフリクトを避けるように努力することも重要ですが、万一コンフリクトが発生した場合でも、内容を確認し、一つずつ解決していくことができます。冷静に対処すれば、問題ありません。
では、コンフリクトを発生させてみましょう。
まず、現在のファイルの中身を確認します。
cat file01文字列が3行ある状態です。
続けて、下記のコマンドを順に実行してください。
// branch_bブランチを作成
git checkout -b branch_b
// branch_bのfile01ファイルに4行目の文字列を追加
echo "Git test 4th string" >> file01
// ステージ
git add .
// コミット
git commit -m "conflict test branch_b"
// masterブランチにもどる
git checkout master
// maseterのfile01ファイルに4行目の文字列を追加
echo "Git test 3.5th string" >> file01
// ステージ
git add .
// コミット
git commit -m "conflict test master"実行し終えると、下記のような状態になっています。

masterブランチでも、branch_bブランチでも4行目を異なる文字列で編集しました。
この状態でbranch_bブランチをmasterブランチに取り込んでみましょう。
// branch_bをmasterに取り込む
git merge branch_bすると、以下のように表示されると思います。

「マージできなかったぞ!file01で同じ行変更してるぞ!直してからコミットしろ!」といわれています。
それでは、修正していきましょう。
git-testディレクトリ配下のfile01を開くと、このような表示になっていると思います。
※HEAD=現在のブランチの変更内容

今回は、masterブランチでの変更とbranch_bブランチでの変更の両方を取りたいので、下のように修正して上書き保存します。

そしてコマンドプロンプトに戻り、下記のコマンドを実行していきます。
// 差分を確かめる
git diff
// ステージング
git add .
// 再マージ
git meger --continueすると、ターミナルに確認が出てくるので、「Ctrl + X」を押して確認を閉じてください。
そうすると、以下のようになると思います。

㊗masterブランチとbranch_bブランチどちらの変更も取り入れることができました!
以上がコンフリクト解消の流れでした。
コメントを残す