💙 들어가며
이번 시간부터는 본격적으로 Git의 구조와 자주 사용할 명령어를 배우고 실습해보았다.
GIT을 쓰려면 먼저 그 단계와 구조를 익혀야 하는 것이 중요해 보인다.
자세한 내용은 아래서 풀어보겠다.
✏️ GIT의 구조
GIT은 앞으로 우리가 할 작업 파일의 버전 관리를 위해서 필요한 도구라는 것을 배웠다.
그렇다면 버전 관리를 하기 위해서 우리가 GIT에 대해서 알아야 할 것은 무엇일까?
일단 기본적으로 GIT이 어떻게 구성되어 있는지 구조를 간단하게 살펴 볼 필요가 있겠다.
#Git의 구조
구조는 다음과 같다.
Work Tree ▶ Index(stage에 올리는 것) ▶ Commit(사진 찍기 개념, 저장하고 종료)
그리고 우리가 버전을 생성하는 방법에 따라서
하나의 줄기로 관리가 되기도 하고 마치 가지가 뻗어나가듯이 브랜치라는 모양으로 관리가 될 수도 있다고 한다.
배웠던 개념 중에 중요했던 것은
Index(Stage)에 올리고 최종적으로 Commit을 해야지만 버전이 생성된다는 것이다.
(Stage에 올라가야만 Commit 할 수 있음)
자세한 내용은 따로 또 포스팅을 해야 할 것 같다.

✏️ 자주 사용할 GIT Terminal 명령어들
이제부터 사용해 볼 다양한 명령어들을 주기적으로 추가하고 수정해야겠다.
일단 가장 먼저 GIT의 구조에 따라서 저장하기 위해서 사용해야 하는 명령어들이다.
★Git에 저장하기 위해서는: status ▶ add ▶ commit의 순서를 기억하자★
위 순서를 기억하면서 추가적으로 작업을 하며 필요했던 명령어들을 적어보았다.
#터미널 컨트롤
- nano처럼 터미널에서 작업이 되는 경우가 있는데,
:로 끝나는 지점에서 q를 누르면 빠져나올 수 있다. wq는 저장하고 빠져나오는 것이다. - Ctrl + C // 무한 루프(혹은 먹통이 된) 터미널을 강제 종료 할 수 있다.
- git --help // 간단한 명령어들을 확인할 수 있다.
#상태파악 (status, log, show, diff --staged)
- git status // 내 워크 디렉토리에서 변경된 상태가 있는지 알려준다.
- git status --short(혹은 -s) // git status의 짧게 요약된 상태이다.
- git log // 내가 버전을 생성한(=커밋한) 이력을 볼 수 있다.
- git log --all // 어떤 브랜치이든 상관없이 모든 커밋 이력을 보여준다.
- git log --oneline // git log의 짧게 요약된 상태, 해시값(7자리)와 함께 커밋 기록이 짧게 요약된다.
- git log --graph // 브랜치들이 어떻게 연결되어 있는지, 가독성 좋은 형태로 디렉토리 표시한다.
(참고로, VS Code Extensions에서 Git Graph라는 플러그인을 설치하면 Scource Control라는 메뉴에서
그래픽 이미지로 볼 수 있다. 터미널에서 보는 것보다 훨씬 더 가독성이 좋음!)
- git show 해시값(7자리), 파일명(확장자 X)
// Enter를 누르면 한 줄씩 해시값의 내용을 볼 수 있다.
(커서 조정 K: 위로 올라가기, Enter, J: 아래로 내려가기)
- git diff --staged // 변경된 내용만 골라서 확인할 수 있다.
#저장하기 1단계 (add, restore) // Work Tree ◀▶ Index - Stage
※ Stage에 올리기 위해서는 항상 먼저 변경된 내역이 저장되어 있어야 한다.
저장이 안 되어 있는 경우 아무리 add로 스테이지에 올렸어도 수정내용이 반영되지 않는다고 한다.
status를 통해서 확인해보면 저장이 안 되어 있는 경우 빨간색의 아이콘이 보인다.
(위: 저장되어 있음, 아래: 저장되지 않은 데이터 있음)
- git add 파일명(확장자 O) .(해당폴더) *(전체) // Work Tree ▶ Index 스테이지로 올린다.
- git restore --staged 파일명(확장자 O) // Index ▶ Work Tree 스테이지에 올라와 있던 것을 워킹 디렉토리로 내린다.
#저장하기 2단계·최종 (commit, reset, revert, branch) // Index ◀▶ Git 저장소
※ Stage에 올리와 있어야지만 Git 저장소에 저장할 수 있다.
저장이 안 되어 있는 경우 아무리 add로 스테이지에 올렸어도 역시 수정내용이 반영되지 않는다고 한다.
commit을 하기 위해서는 먼저 account에 사용자 정보를 세팅해줘야 한다.
세팅하지 않고 commit 할 시에 다음과 같이 오류가 뜨고 이메일과 이름을 설정하라고 나온다.
참고로 이 명령어에 섞여있는 --global이라는 뜻은 어느 경로로 키든 내 정보가 세팅되어 있을 수 있도록
시스템 전역에 설정해준다는 의미라고 한다.
- git config --global user.email "이메일주소" // 사용자 이메일을 설정하는 것이다.
- git config --global user.name "이름" // 사용자 이름을 설정하는 것이다.
- git config --list // config한 정보가 list로 쭉 나온다. (맨 밑에 : 나오면 그냥 q 누르면 됨)
사용자 정보가 세팅되고 나면 commit을 한다. (Index ▶ Git 저장소)
- git commit // commit 창이 뜨면 간단한 메모 쓰고 닫기 누르면 최종 commit 한다.
- git commit -m "메세지" // commit 창 안 띄우고 바로 메모 쓰고 commit한다.
- git commit -am "메세지" // add하면서 바로 commit한다.
아 물론 commit한 기록을 되돌릴 수도 있다. (Git 저장소 ▶ Index)
- git reset 예전버전 해시값(7자리) 또는 브랜치 // 적어준 곳까지만 남기고 그 이후 commit된 버전을 모두 삭제한다.
- git revert 예전버전 해시값(7자리) 또는 브랜치 // reset과는 다르게 이전 기록들이 남으면서 새로운 버전으로 생성하는 방법이다.
- branch // revert와는 달리 되돌아가면서 새로운 브랜치(가지)가 생성되고 이전 기록들도 남는다.
- git branch // 현재 생성되어 있는 브랜치들을 보여줌,
여기서 checkout을 활용하여 원하는 브랜치로 이동할 수 있음
- git branch 이름 // (이름의) 브랜치를 새로 만든다
- git branch 원래이름 바꾸고 싶은 이름 // 기 설정된 브랜치 이름을 바꿀 수 있음
#버전 이동 (checkout, switch)
아예 되돌리는 것 말고 그냥 잠깐 내용만 확인하고 싶다면 해당 커밋 버전으로 이동할 수 있다.
- git checkout 해시값(7자리) 또는 브랜치 // 원하는 버전으로 왔다갔다 할 수 있다.
- git checkout - // 다시 원래의 마지막 상태로 돌아간다.
- git switch -c 새로운 브랜치 이름 // 브랜치를 만들면서 바로 이동을 할 수 있다. (c의 뜻은 creat)
checkout의 역할이 너무 많아지면서 새로 생긴 기능이다.
(checkout은 switch와 restore로 나눠졌다.)
이 외 커밋한 버전을 식별하는 방법으로는 아래가 있다.
- HEAD: 꼬리표 개념, 현재 내가 있는 위치를 가리킨다.
- master(혹은 main이라고도 함): 커밋을 하면 기본적으로 생성되는 브랜치이다. 항상 기본이라고 생각하면 된다.
💙 마치며
버전을 새로 생성하는 것은 기본적으로 해야 하는 능력인 것 같고,
적절한 상황에 적절한 명령어를 사용하여 내가 잘못 만든 버전도 삭제하고 되돌아갈 줄 알게 되는 것이 핵심인 것 같다.
추가적으로 여러가지 상황에서 사용해볼 만한 것들을 습득하고 있는데, 계속해서 추가해 나가야겠다.
(어렵..군...)

'GIT' 카테고리의 다른 글
[뉴렉처 6기] GIT|CLI로 했던 git push를 이클립스에서 GUI로 해보자 (230614) (2) | 2023.06.17 |
---|---|
[뉴렉처 6기] GIT|로컬 저장소와 원격 저장소 연결(git init, remote, clone)|버전 관리 하기(pull, push) (0) | 2023.06.11 |
[뉴렉처 6기] GIT|레파지토리와 워킹 디렉토리란?|로컬 저장소와 원격 저장소의 차이 (2) | 2023.06.10 |
[뉴렉처 6기] GIT|Visual Studio Code를 이용해서 Git bash 설치하기 (0) | 2023.06.01 |
[뉴렉처 6기] GIT|Git을 왜 사용하나요?|버전 관리의 중요성 (0) | 2023.06.01 |