Gitのチュートリアル/コマンドラインの操作

最初に、Gitのチュートリアル及びコマンドラインの操作について書いていきます。

Gitとは同時に多数の人が同じドキュメントやコードを、互いに妨げることなく同時に操作することができる、分配型のバージョンコントロールシステムです。

チュートリアルを開始するために、まずはこのページにアクセスします。

アクセスすると上のような画面が出ます。
なお、このコマンドプロンプトは”octobox”と名付けられたディレクトリの中にあります。
まずはGit repositoryを初期化するため、上の画面で”git init”と入力します。

すると上のような状態になり、これは”octobox”というディレクトリが、/.git/の中で空っぽのディレクトリを持っていることを示しています。
このリポジトリは、Gitが動く際の隠れたディレクトリとなります。

次にプロジェクトの現在の状況を確かめるために、”git status”と打ち込みます。

すると上のような画面になり、これはoctobox repositoryの中で”octocat.txt”というファイルが生成されたことを表しています。
ここでもう一度”git status”と入力すると、リポジトリの状態がどのように変わったか見ることができます。

上の画面はもう一度“git status”と入力した後のもので、Git repositoryが正しく動作しているように見えます。
ここでGitがどのようにして「”octocat.txt”は”untracked”である」と言っていることに注意してください。
これは、Gitが”octocat.txt”を新規のファイルとみなしている、という意味です。
Gitに”octocat.txt”に至るまでの経路の変更を伝えるべく、まず”git add”を用いることによって、”octocat.txt”をステージングエリアに追加する必要があります。
そこで”git add octocat.txt”と入力します。

そうすると上のような画面になり、これでGitが”octocat.txt”に至るまでの経路を追えているということになります。
ここでもう一度”git status”と入力すると、我々がどこにいるのか確認することができます。

ここでどのようにして、Gitは変更がコミットされたと言っているのか注意してください。
ここにリストアップされたファイルはステージングエリア内にあり、もう我々のリポジトリには存在しないということです。
リポジトリ内にファイルを蓄える前に、我々はそれらをステージ内に追加したり、あるいはステージ内から取り除くことができます。
我々のステージの変更を記録するために、何を変更したのかを示す文と共にコミットコマンドを入力します。
ここでは”git commit -m “Add cute octocat story””と打ち込みました。

これで、全ての変更が追加されました。
同時にたくさんのファイルを追加する場合には、ワイルドカードを使うこともできます。
また、下のディレクトリにいくつかテキストファイルが追加されたことに注意してください。
“octofamily”と名付けられたディレクトリに複数ファイルを配置し、他のいくつかを”octobox”ディレクトリの根源で終わる部分に配置しました。
幸運にも、我々は全ての新しいファイルを”git add”を用いたワイルドカードによって追加することができます。
引用符を忘れないように気をつけましょう。

これで全てのファイルがステージングエリアに追加されたことになります。
自由に“git status”を走らせて、自分が何をコミットしようとしているのか確認することができます。
問題なさそうであれば、”git commit -m ‘Add all the octocat txt files’”と打ち込みます。

これでまた、少々コミットすることができました。
ここで、我々がどんな変更を加えたかチェックしてみましょう。
“git log”というコマンドを使うことで、今までにコミットした全ての変更をその順番に沿って確認することができます。

上の画面のように、今までに実行したコミットを確認することができました。
これで前に進んだと同時に、https://github.com/try-git/try_git.git上の”Try Git”を使って、新たな空っぽのGitHubリポジトリが作成されました。
ローカルリポジトリをGitHubサーバーに送るために、リモートリポジトリを追加する必要があります。
このコマンドにはリモートネームとURLが必要になります。
今回は”git remote add”を使って、以下のように入力してください。
“git remote add origin https://github.com/try-git/try_git.git”

pushコマンドは、コミットの準備ができたときに、どこにコミットするのかGitに伝えるためのものです。
そこで我々のローカルでの変更を、Github上の元々のリポジトリにも加えてみましょう。
リモートの名前をoriginとし、デフォルトのローカルブランチ名をmasterとします。”-u”はGitにそのパラメーターを記憶させ、それゆえ次回は単純に”git push”を走らせるだけで、Gitは何をすべきか認識してくれます。
ここでは”git push -u origin master”と入力してみましょう。

少し、様子を見るふりをしてみましょう。
我々のGithubプロジェクトに新たな人が招待され、彼らは我々の変更を引き戻したうえに、彼ら自身のコミットを行い、それをプッシュしました。
“git pull down origin master”を走らせることで、我々のGithubリポジトリへの変更をチェックし、新たな変更を引き戻すことができます。

octocatファミリーに、いくつか追加や変更が行われたようです。
“git diff”というコマンドを用いて、我々の最後のコミットからどう変わったのかチェックしてみましょう。
このケースの場合、diffで最新のコミット状態が欲しいため、”HEAD”というものを使ってそれを参照します。

diffのもう1つの素晴らしい使い方は、既にステージ化されたファイル内の変更も見られるという点です。
ステージ化されたファイルは、Gitにコミットする準備ができていると伝えているファイルだということを覚えておきましょう。
ここで”git add”を用いて”octofamily/octodog.txt”という、新たにファミリーに追加されたファイルをステージ化してみましょう。
“git add octofamily/octodog.txt”と入力します。

ここで更に”git diff”にオプションとして” — staged”を加えることで、ステージ化した変更を見ることができます。
ここでは”octodog.txt”が生成されたことが確認できるはずです。
“git diff — staged”と入力してみましょう。

もうoctodogはファミリーの一員であり、octocatは全て押し出されたことになります。
ただ我々はoctocatをoctodogよりも愛しているので、”octodog.txt”を取り除くことによってoctocatの不機嫌さを解消したいと思います。
“git reset”というコマンドを使うことで、ファイルをアンステージ化できます。
ここでは”git reset octofamily/octodog.txt”と入力してください。

“git reset””octodog.txt”をアンステージ化しましたが、まだそれが残っているということに注意しなければなりません。
この時点では、単純にアンステージ化されただけです。
octodogが来て一団を荒らす前に物事が戻れたら、それが最高でしょうが。
“git checkout — <target>”というコマンドを用いることで、最後のコミット状態までそのファイルの変更を戻すことができます。
“git checkout — octocat.txt”と入力して、”octocat.txt”の最後のコミット状態まで戻ってみましょう。

デベロッパーが特別な仕事をしていたり、あるいはコードのコピー(別名ブランチ)をしばしば作るときにバグが発生する場合、分けてコミットすることができます。
そのうえ、コミットしたときにこのブランチはメインのブランチにマージすることも可能です。
ここでは厄介なoctocatsを全て取り除きたいので、”clean up”と呼ばれるブランチを作り、そこで全ての仕事をしましょう。
“git branch clean_up”と入力してください。

“git branch”と打てば、メインブランチとしてmaster、更に新たに clean_upと名付けられたブランチを見ることができます。
“git checkout <branch>”というコマンドを使うことで、ブランチを切り替えることが可能です。”git checkout clean_out”と入力して、clean_upブランチに切り替えてみましょう。

これで今はclean_upブランチにいることになります。
ここで“git rm”という、ディスクから実ファイルを取り除くだけでなく、ステージ化されたファイルをも取り除けるコマンドを用いることで、厄介なoctocatsを全て消去することができます。
ここでまたワイルドカードを用いることにより、全てのoctocatsを取り除けます。
 “git rm ‘*.txt’”と入力してください。

これで全てのcatsが取り除かれ、あとはこの変更をコミットする必要があります。
“git status”コマンドを走らせることで、コミットしようとしている状態をチェックすることができます。
コミットするためには、”git commit -m “Remove all the cats””と入力してください。

これでcatに関することはほぼ全て終わり、いやバグを修正したのでmasterブランチに戻す必要があって、clean_upブランチからの変更をmasterブランチにコピーもしくはマージすることが可能です。
masterブランチに戻すには、”git checkout master”と入力します。

これで、clean_upブランチからmasterブランチにマージしなければならないときが来ました。
我々は既にmasterブランチ上にいるので、”git merge clean_up”と入力してGitにclean_upをmasterにマージする、と伝えてあげればOKです。

これで全てのバグ修正とマージが、無事に完了しました。
あと残されているのは、自分自身のclean upです。
clean_upブランチでの作業は全て完了したので、もうこれは必要ありません。
“git branch -d <barnch name>”というコマンドを用いることで、ブランチを消去することができます。
ここではclean_upブランチを消去してみましょう。

ここまで来たら、あとは最後のステップになります。
残っているのは、リモートリポジトリで作業した全てをプッシュすることです。
“git push”と入力すれば終わりです。