Git의 Commit

    Working Directory / Stage / Git Repository

    • Working Directory : 현재 변경점을 기록하고 있는 장소
    • Stage : Origin이 되는 장소. 여기에 등록되는 시점의 값을 가지고 있는다.
    • Git Repository : Commit 시, 영구적으로 변경점이 반영된다. 

    Git에는 논리적으로 Working Directory와 Stage, Git Repository가 존재한다. 이 Repository는 논리적으로 이력을 관리하기 위해서 분리되어있다.

     

    Commit

    • Commit은 "~를 적어두다"라는 의미다. 즉, 의미 있는 작업을 기록해두는 것이고, Commit하는 시점의 변경점을 기록해둔다.
    • Commit 시점을 확인하고, 해당 시점으로 돌아갈 수 있다.
    변경 전 변경 후 (Commit!) 원복
    안녕하세요. 안녕하세요 지니입니다. 안녕하세요.

     

    Git의 파일 관리 방법

    Git은 부모 커밋으로부터 변경된 부분만 추출해서 저장한다. 즉, 부모 커밋으로부터 변경된 부분을 반영한 자식 커밋을 만든다. 

     

    1. 새 파일 생성 → Git은 생성을 자동으로 감지하고 Working Directory로 넣어줌.

    • 먼저 Git Init를 통해서 새롭게 Git Repository를 만들고, Git Status를 이용해 깃 저장소의 상태를 확인해본다. 아직까지 변경점이 없기 때문에 No Commits yet이라는 문구가 나온다! 이 때 index.txt라는 파일을 만들어본다.

    • 새롭게 만들어진 파일들은 Working Directory에 등록되고, 이것을 Git이 자동으로 추적한다. 
    • index.txt라는 파일을 만들고 git status를 하면, Untracked File을 확인할 수 있다. 
      • 파일의 생성/삭제는 Git이 알고 있지만, 파일의 변경 유무(Untracked)는 사용자가 지정해줘야 한다는 것을 의미한다. 

     

    2. Git에 새 파일 등록(add)

    $ git add <파일_이름>
    • 새로운 파일이 만들어지면 자동으로 Working Directory에 등록된다. 하지만 Working Directory에 등록만 되면 Untracked 상태이기 때문에 변경점의 추적이 되지 않는다. 
    • 변경점 추적을 위해 Tracked로 바꿔야하는데, add 명령어를 이용해 해당 파일을 Stage로 복사해준다. Stage로 복사되면 Tracked 상태가 된다. 
    • Commit을 하기 위해서는 반드시 Stage 영역에 등록되어야 가능하다.

    • git add 명령어를 이용하면, 해당 파일은 Stage 영역으로 잘 등록된 것을 확인할 수 있다. 
    • 또한 Working Directory / Stage 영역의 파일 내용의 차이가 없어서 Commit을 할 준비가 된 상태가 된다.

     

    3. Git에서 파일 등록 취소 (rm)

    $ git rm --cached index.txt
    • 등록 취소는 Stage 영역으로 올라간 파일을 Working Directory로 내려둘 수 있는 방법이다.

    위 명령어를 수행한 파일을 보면, Stage에 올라간 파일이 다시 Untracked 상태(Working Directory)로 내려온 것을 볼 수 있다. 

     

    4. 등록된 파일 이름이 변경되었을 때

    $ git mv <파일 이름> <새 파일 이름>
    • 위 명령어를 이용하면 파일의 이름을 변경해주고, 상태까지 그대로 유지해준다.
    $ mv <파일 이름> <새 파일 이름>
    $ git rm index.txt
    $ git add home.txt
    • git mv는 위 세 가지 명령어를 한번에 처리해주는 명령어로 이해할 수 있다.

    • 다음과 같이 변경된 파일이 Stage 상태에서 잘 있는 것을 볼 수 있다. 

     

    5. Commit 수행 

    1. Stage와 Working Directory의 작업 내용이 차이가 없도록, Working Directory의 내용을 Stage에 올려줘야한다.
    2. Stage의 내용과 Head Commit의 차이점을 자식 Commit으로 만들고, Head Pointer를 옮긴다.
    3. Commit을 하게 되면 변경 내용이 영구적으로 Git 저장소에 저장된다. 
      1. Commit을 하면 Stage 영역이 초기화 된다.

    Commit은 위 두 가지 단계로 나뉘어지는 것 같다. 여기서 Head는 현재 커밋의 기준이 될 부모 커밋을 이야기한다. 

    $ git commit -m first commit
    • 위 명령어를 이용하면 Commit을 할 수 있다.
    • Commit을 하게 되면, 변경 내용이 Git 저장소에 영구적으로 저장된다.

    • Commit을 한 후, git status로 상태를 보면 Commit 할 내용이 아무것도 없는 것을 볼 수 있다. 
    • 이전에는 파일이 새로 생성되어서 Working Directory에는 있었으나, Git 저장소에는 저장이 되지 않은 상태였다. 따라서 Commit할 내용이 남아있었다.
    • 현재는 '생성되었다는 사실'도 Git Repository에 저장되었기 때문에 더 이상 Commit할 것이 없다. 

    6. 두번째 Commit

    • home.txt 파일을 살짝 변경했다. 변경을 하면, 변경되었다는 것을 Git이 자동으로 알고 변화가 있었음을 알려준다.
    • 이 때 변화는 "modified" 라는 것을 볼 수 있다.

    7. 수정된 파일 되돌리기

    $ git checkout -- <파일_이름>
    • 수정한 파일이 잘못된 경우, 수정 파일을 마지막 커밋 상태로 돌릴 수 있다.
    • 위의 명령어를 이용하면 마지막 커밋 상태로 변경된다.

    • 위 명령어를 이용해서 다음과 같이 파일을 변경했다. 이렇게 될 경우, Commit할 내용이 없다는 것을 볼 수 있다. 

    • 실제 파일도 "abc" → "abcdefg" → "abc"로 다시 원복된 것을 볼 수 있다.

     

    8. 스테이지에 등록

    • home.txt에 변경점을 만들어주면 Git이 Modified 된 것을 볼 수 있다. 
    • 변경점이 발생한 부분을 Commit에 등록하는 것도 동일하다.
      • 현재 Untracked 상태이고, Stage에 올라가 있지 않은 상태이기 때문에 등록할 수 없다.
      • git add <파일_명>으로 등록하고 Commit 해주면 된다.
    $ git add <파일명>
    $ git commit -m second commit
    • 위 명령어를 이용하면 등록할 수 있다.

     

    9. Diff 확인하기

    • Working Directory / Stage Diff
    • Commit 간의 Diff

    git diff 명령어를 이용하면 위 두 가지 차이점을 확인할 수 있다. 

    9-1 Workding Directory / Stage

    $ git diff
    • 위 명령어는 Working Directory / Stage의 차이점을 보여주는 명령어다.

    • 사용해보면, 현재 Workding Directory / Stage의 차이점을 보여주게 된다. 

    • add 명령어를 이용해서 Working Directory의 상태를 Stage로 옮겨주면, 두 개체 간의 차이점이 없기 때문에 Diff를 이용해도 어떤 차이점도 출력되지 않는다.

     

    9-2 커밋 간 차이

    $ git diff head
    • 스테이지 영역의 값과 가장 마지막에 커밋된 내용을 비교하는 명령어다.
    • 가장 마지막에 커밋된 내용을 가지고 있는 것은 부모 커밋인 Head다. 따라서 위 명령어를 이용하면 현재 Stage의 값과 부모 Commit 간의 차이를 확인할 수 있다. 

    '기타 Tool > Git' 카테고리의 다른 글

    Git Branch  (1) 2022.08.27
    Git Remote Repository  (0) 2022.08.27
    Git Repository 복사  (0) 2022.08.26
    GIt의 워킹 디렉토리 / 스테이지 / 상태  (0) 2022.08.20
    Git : Git 저장소 만들기  (0) 2022.08.17

    댓글

    Designed by JB FACTORY