최근 commit에서 무엇이 변경되었는지 확인하고 싶을 때 간단하게 사용할 수 있는 명령어로 [ git diff ]가 있다.

사실 변경사항을 확인하기 위해서는 전문적인 diff 도구들을 사용하는 것이 좋다.
[ config merge.tool ] 설정을 할 때에 언급되었던 도구들의 UI가 제일 예쁘다.

하지만, GIT의 특성상 가장 편리한 인터페이스가 Cmmand Line Interface이기 때문에
Consol 환경에서 바로 변경 사항을 확인할 수 있는 방법은 잘 알아두는 것이 좋다.


우선 파일 하나를 변경한 commit이 있는 상황을 가정해보자.

 commit : (HEAD^) d664401  commit : (HEAD) d74336a
 abc  abc def


가장 간편하게 사용할 수 있는 변경사항 확인 방법은 [ git diff HEAD^ ] 명령이다.
하지만 옵션을 사용하면 단어 단위로 변경 내역을 확인 할 수도 있다.
 
 git diff HEAD^  git diff HEAD^ --word-diff
 diff --git a/4th.txt b/4th.txt
index 8baef1b..f9686f5 100644
--- a/4th.txt
+++ b/4th.txt
@@ -1 +1 @@
-abc
+abc def
 diff --git a/4th.txt b/4th.txt
index 8baef1b..f9686f5 100644
--- a/4th.txt
+++ b/4th.txt
@@ -1 +1 @@
abc {+def+}


더 재미있는 옵션도 있다.

$ git diff HEAD^ --word-diff=color

diff --git a/4th.txt b/4th.txt
index 8baef1b..f9686f5 100644
--- a/4th.txt
+++ b/4th.txt
@@ -1 +1 @@
abc def

그러면 삭제된 내역이 있는 경우에는 어떻게 나올까?


 commit : (HEAD^) d74336a  commit : (HEAD) 04c25de
 abc def  def ghi

$ git diff HEAD^ --word-diff=color

diff --git a/4th.txt b/4th.txt
index f9686f5..4842857 100644
--- a/4th.txt
+++ b/4th.txt
@@ -1 +1 @@
abcdef ghi

그렇다. 빨간색은 삭제, 녹색은 추가... 색으로 변경 내역을 확인할 수 있게 해준다.


변경 사항이 많을 때엔 큰 소용이 없겠지만,
소스 코드에서 수치만 변경을 했다던지 일부 단어들을 변경한다던지의 작은 부분의 변경이 있을 때엔
라인 단위의 diff 보다는 단어 단위의 diff가 보다 좋은 가독성을 보여줄 것이다.


굳이 색으로 표현하는 것이 아니더라도 [ --word-diff ] 옵션을 사용해보는 것을 추천한다.

우리 모두 즐거운 Gitster가 됩시다~ ^^
반응형

'SCM > Git-GitHub' 카테고리의 다른 글

[005] Install GIt (in Ubuntu)  (5) 2013.04.25
Empty commit - 내용없는 commit 만들기  (0) 2013.03.31
commit을 누가 얼마나 했나요?  (0) 2013.03.16
git log 출력 형식 꾸미기  (0) 2013.03.10
Git 1.8.1.3 Release  (0) 2013.02.19

지난 내용에 더불어서 좀 특이한 경우를 살펴보기 위해서 보충해서 좀 적어보겠다.

소스 파일을 수정을 한 후 git 에게 commit을 할 것들을 알려주기 위해서 add를 했는데,
그리고 나서 또 수정을 하게 되면 어떻게 될까?


1. modify cycle

   - 일반적으로 파일을 수정하는 경우는 아래와 같이 표현할 수 있다.


   - 소스 파일을 수정한 후 'git add'를 하여 staged 상태로 만든 후 'git commit'을 하면 되는 것이다.


2. modify

   - 소스 파일을 수정하는 과정까지 일단 해본다.


   - 위 화면을 설명해보면...

      ① 파일 목록을 확인 [ ls -al ]
      ② 현 상태 확인 [ git status ] → 'nothing to commit (working directory clean)'
      ③ 소스 파일 수정 [ nano abiParse.py ]
      ④ 현 상태 확인 [ git status ]
      ⑤ 변경 사항 확인 [ git diff ]


3. git add

   - 일단 staged 상태로 만들기 위해 'git add'를 하자.



4. modify

   - 'commit' 하기 전에 다시 또 수정을 하면 어떻게 되는지 확인해보자.


   - 지금 상황에서 commit을 하게 되면 지금 수정하기 바로 전에 add를 한 시점에서의 내용이 commit이 되고,
   - 지금 변경한 내용까지 같이 commit을 하고 싶으면 다시 'git add'를 해주면 된다.


5. git diff

   - 이런 이상한 상황에서 각각을 확인하기 위한 'git diff' 에 대해서 알아보자.


   - [ git diff ]
      ▷ staged 되지 않은 변경 내역을 확인해 준다
      ▷ 즉, 수정을 하고 'git add' 를 하지 않은 내용을 보여준다
   - [ git diff --staged ]
      ▷ 지난 마지막 commit 에서부터 staged 된 내용까지의 변경된 내역을 확인해 준다
      ▷ 즉, 수정을 하고 'git add'를 해놓은 내용을 보여준다




조금 뭔가 햇갈리기 시작하시는 분은 아직 git의 staged 상태에 대해서 느끼지 못하셔서이다.
다음 번에는 이 staged 된 상태에 대해서 보다 더 다뤄보도록 하겠다.

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

One Shot - commit  (2) 2012.01.22
git Review - stage, add, commit  (0) 2012.01.19
Compare - modify (git diff, git log) 1/2  (0) 2012.01.17
Tracking file - ignoring  (0) 2012.01.15
Tracking file - add, status, commit  (0) 2011.11.30

git 에게 관리할 파일을 알려준 다음 우리가 경험하게 되는 다음 일은 바로 파일의 수정이다.
(아래에서 보는 코드의 원본은 open-source 로 진행되는 videoparser 이다)

관리 중인 소스 파일 중 하나를 수정한 이후...


1. modify & git status

   - 코드를 수정한 후 'git status'를 실행한다
   - 'modified' 된 파일이 확인된다.

 



2. git diff

   - 과연 무엇을 수정했는지 그것을 알고 싶으면 'git diff'를 실행하면 된다.



3. git add

   - 수정된 파일을 git 에게 알려주기 위해서는 우선 'git add' 과정을 다시 거쳐야 한다.



4. git commit

   - 최종적으로 'git commit'을 실행하고 코멘트를 적어주면 최종적으로 수정한 내역이 반영된다.



5. git log

   - 'git commit'을 실행하면 최종적으로 어떤 내용이 반영되었는지 알려준다.
   - git 에 반영된 내역들을 확인하기 위해서는 'git log'를 실행하면 볼 수 있다.




만약 여러개의 파일들을 수정하면 그것들을 일일이 하나씩 등록을 해야하는지,
변경한 것을 취소하고 싶을 때 어떻게 하는지 지금 상황에서 궁금한 것이 많겠지만,
차차 추가적으로 확인하도록 하자!!! (절대 지금 졸려서 그런 것 아니다!!! ^^)

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

git Review - stage, add, commit  (0) 2012.01.19
Compare - modify (git diff, git log) 2/2  (0) 2012.01.18
Tracking file - ignoring  (0) 2012.01.15
Tracking file - add, status, commit  (0) 2011.11.30
File Status Lifecycle in GIT  (1) 2011.11.22

+ Recent posts