ファイルの差分表示
ファイルを修正し差分を表示してみましょう。リスト10はProgram.csを修正し、状態の表示と差分を取ったところです。
$ git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: Program.cs ...(1) # no changes added to commit (use "git add" and/or "git commit -a") $ git diff Program.cs ...(2) diff --git a/Program.cs b/Program.cs index e0dde98..91ce32d 100644 --- a/Program.cs +++ b/Program.cs @@ -9,6 +9,7 @@ namespace ConsoleApplication { static void Main(string[] args) { + System.Console.WriteLine("ようこそ Gitの世界へ!!"); } } }
(1)によってProgram.csに修正があったこと(modified)が分かります。また、(2)のgit diffコマンドで差分を表示でき、"+"の行が追加されています。また、リスト12のようにコミットIDやファイル名を「...」でつないで、その間のログを表示することもできます。
$ git diff 1b45be...4b5f
ファイルの変更
最後に変更をリポジトリに反映します。先ほどと同じくaddコマンドを使ってステージに登録した後にコミットします(リスト13)。
$ git add Program.cs ... $ git commit [master 4d5fcc3] コンソール表示の追加 1 file changed, 1 insertion(+) ...
また、すでにリポジトリに登録されているファイルに関しては、-aコマンドをつけることによって、git addコマンドを省略することができるショートカットになっています(リスト14)。新規作成されたファイルには適用できません。
$ git commit -a Program.cs
ファイルを削除する
リポジトリに登録されたファイルを削除するには、git rmコマンドを利用します(リスト15)。この時点ではまだファイルの削除がステージされたにすぎません。削除を完了するためには、他の操作と同様にコミットする必要があります。作業ディレクトリにファイルを残したままにしたい場合は、--cachedオプションを指定できます。
$ git rm Class1.cs rm 'Class1.cs' ... $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # deleted: Class1.cs # $ git commit [master 78c1a10] Class1.cs の削除 0 files changed delete mode 100644 Class1.cs $ git rm --cached Class1.cs // Class1.csを残しておきたい場合
ファイルを移動する
リポジトリに登録されたファイルを移動するには、git mvコマンドを利用します。他の操作同様コミットで移動を完了します。
$ git mv Program.cs Program2.cs ... $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # renamed: Program.cs -> Program2.cs # $ git commit ...
ステージングエリアについて
Gitには作業ディレクトリ、ステージングエリア、リポジトリと3つの状態があることは前述したとおりです。これらの関連を示したものが図1になります。
繰り返しになりますが、ステージングエリアとはコミット前の準備場所です。修正や移動、削除したファイルを直接コミットすることはできず、ステージングエリアにいったん登録する必要があります。操作が少々面倒にはなりますが、コミット対象を細かく制御できるメリットもあります。このあたりがSVNと異なる作法であって、混乱する元でもあります。まずは、3つの状態について意識することが、Gitを使いこなすためには重要だと思います。
まとめ
初回として、Gitのセットアップ方法からCUIによるリポジトリ作成~変更までを駆け足で解説しました。まだローカルリポジトリのみの操作説明で、SVNとの違いが明確になってきていませんが、次回以降でGUIによる操作説明、リモートリポジトリなどについて順を追って解説していきます。