Git의 Commit
- 기타 Tool/Git
- 2022. 8. 26.
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 수행
- Stage와 Working Directory의 작업 내용이 차이가 없도록, Working Directory의 내용을 Stage에 올려줘야한다.
- Stage의 내용과 Head Commit의 차이점을 자식 Commit으로 만들고, Head Pointer를 옮긴다.
- Commit을 하게 되면 변경 내용이 영구적으로 Git 저장소에 저장된다.
- 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 |