최근에 대부분의 오픈소스나 프로젝트를 git 으로 관리합니다.


당연히 수정한 내용에 대한 추적과 변경 사항의 비교가 필요한데요


가장 기본적으로 사용하는 것들만 추려 봅니다.


==========================================

현재 수정한 파일을 확인할때


root@boggle70-P55-US3L:linux-2.6# 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:   Makefile

#

# Untracked files:

#   (use "git add <file>..." to include in what will be committed)

#

# boggle70@eabi

no changes added to commit (use "git add" and/or "git commit -a")

root@boggle70-P55-US3L:linux-2.6# 


현재 내가 수정한 파일과 새로 생성한 파일이 보입니다.
==========================================
현재 프로젝트의 tag 를 확인할때

root@boggle70-P55-US3L:linux-2.6# git tag
master
v2.6.11
v2.6.11-tree
v2.6.12
v2.6.12-rc2
v2.6.12-rc3
v2.6.12-rc4
v2.6.12-rc5
v2.6.12-rc6
v2.6.13
v2.6.13-rc1
v2.6.13-rc2
v2.6.13-rc3
v2.6.13-rc4
v2.6.13-rc5
v2.6.13-rc6
v2.6.13-rc7

많아서 조금 짤랐습니다.
==========================================
새로운 브랜치로 가보겠습니다.

root@boggle70-P55-US3L:linux-2.6# git checkout v3.9-rc7
Checking out files: 100% (9653/9653), done.
Note: checking out 'v3.9-rc7'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at 41ef2d5... Linux 3.9-rc7

이 버전에서 브랜치를 하나 나가죠...

root@boggle70-P55-US3L:linux-2.6# git branch mykernel
root@boggle70-P55-US3L:linux-2.6# git branch
* (no branch)
  master
  mykernel

네.. 새로운 브랜치가 생겼습니다.
==========================================
현재 브랜치는 mykernel 입니다.
분기하기전 브랜치인 v3.9-rc7 과 다른점을 볼까요?

root@boggle70-P55-US3L:linux-2.6# git diff v3.9-rc7
diff --git a/Makefile b/Makefile
index 9cf6783..d7193b1 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 VERSION = 3
 PATCHLEVEL = 9
-SUBLEVEL = 0
+SUBLEVEL = 1
 EXTRAVERSION = -rc7
 NAME = Unicycling Gorilla

딱 보이네요.

그럼 master 버전과 다른점을 보려면?

root@boggle70-P55-US3L:linux-2.6# git diff master mykernel
............
너무 많아서 생략...
==========================================

결론...

git 내부적으로는 tag branch commit 등이 결국 모두 변경에 대한 포인트로 관리됩니다.
두개간의 변경 사항은 원하는 revision,  tag, branch, HEAD  등을 이용해서 
비교가 가능합니다.

헬프 문서는 요약이죠?

작업 디렉토리에서 비교예
               $ git diff            (1)
               $ git diff --cached   (2)
               $ git diff HEAD       (3)
                  1. 현재 작업 디렉토리에서 변경한 것을 볼때
                  2. 인덱스와  마지막 커밋과의  변경사항을 비교할때
                  3. 현재 작업 위치에서 마지막 커밋한 것과의 변경사항을 볼때

브랜치간 비교
               $ git diff topic master