본문으로 바로가기
반응형

[Git (2)]  Git 명령어, 저장소 만들기(init) 및 커밋 하기(add / commit)

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ Git 명령어 간단 정리 및 저장소 생성 및 커밋 하기 (Init, add, commit) 입니다. : ) 

0. 들어가기 앞서

Git은 대부분의 명령을 로컬에서 실행 한다. 

이때문에 여러 장점이 있다. 속도도 빠르며, 오프라인에서도 작업이 가능하다. 등등.

이번 포스팅에선 간단하게 로컬 저장소(Local Repository)를 생성하여 변경 이력을 커밋해보려고 한다.

 

Git 저장소를 사용하기 위하여 주로 다음 2가지 방법으로 저장소를 쓰기 시작 한다.

1) 아직 버전관리를 하지 않는 로컬 디렉토리 하나를 선택해서 Git 저장소를 적용하는 방법

2) 다른 어딘가에서 Git 저장소를 Clone 하는 방법

 

이번 포스팅에선 1)번 방법에 대해 포스팅 하려 한다.

 

※ 기초 개념 및 용어

◎ Repository

 - 저장소(Repository, Repo) : 어떠한 프로젝트 관련 내용을 저장하는 공간 생각하면 된다.

 - 나중에 특정 Repository를 내려 받을때(Clone) 이 Repository를 가리키는 URL이 필요한데, 맨마지막 .git 확장자로 표현된다.

 

Branch

 - 일종의 독립적인 작업 공간

 - 최초 Git 초기화시 기본적으로 "master"라는 브랜치가 생성된다.(main branch)

 - 이후 버그 픽스 또는 여러 프로젝트를 동시에 개발하여 나중에 합치기 위하여 브랜치를 새로 생성, 이후 master로 다시 합치는 작업을 한다.

 

1. Git 저장소 생성

▶ 1. git init

 - 로컬 저장소로 사용할 폴더를 생성하여 해당 폴더로 이동한다.

 - 해당 폴더에서 마우스 우클릭 > git bash 실행 > "git init" 명령어 실행

 - Initialized empty Git repository in [경로] 이렇게 한 줄이 찍히고 .git이라는 숨겨진 폴더가 생성 된다.

$ git init

 - 혹시나 폴더가 보이지 않으면 window10 기준으로 숨긴 항목 표시하기를 선택 하여 준다.

 - 폴더가 생성된 것을 볼 수 있다.

 - .git 디렉토리에는 저장소에 필요한 뼈대 파일(Skeleton)이 들어 있다.

 - 별도 설정을 하지 않는다면 git config --global 옵션으로 설정 되어있는 정보들을 적용한다.

 - 현재 설정정보 조회

git config --global --list

 

▶ 2. git status

 - 파일 상태 확인 명령어 이다.

git status

 - On branch : 현재 작업중인 branch (기본 branch : master)

 - 아직 커밋된 파일이 없음을 확인 할 수 있다.

 

※ 파일 상태 2가지

1) Untracked 상태

 - 단어 의미대로 '추적되지 않고 있는' 파일 이란 뜻이다. 즉 파일을 생성한 후 한번도 add 하지 않은 상태.

 

2) Tracked 상태

 - 파일이 Git에 의해 그 변동사항이 추적되는 상태이다. 이 상태는 또 특성에 따라 3가지로 나뉜다.

 

2.1) Staged 상태 : 파일 수정 후 staging area에 올라가 있는 상태

2.2) Unmodified 상태 : 현재 파일이 최신 커밋 파일과 비교하여 바뀐게 없는 상태

2.3) Modified 상태 : 현재 파일이 최신 커밋 파일과 비교하여 바뀐게 있는 상태

 

 

2. 파일 추가 및 커밋

커밋하기 전 간단하게 다음 개념을 간단히 짚고 넘어 가는것이 좋을 것 같다.

git은 일반적으로 Working Directory, Index, Repository, Stash의 4개 영역으로 관리 된다.

▶ Git의 4가지 영역

1) Working Directory (작업영역)

 - 실제 프로젝트 디렉토리

 - .git 이력과 관련 정보가 저장 된 .git을 제외한 모든 영역

 - 실제 코드의 추가, 수정, 삭제 작업이 이루어지는 영역

 

2) Repository (저장소)

 - 파일, 폴더를 변경 이력별로 저장해 두는 곳

 - .git 디렉토리내 존재하며 2가지로 나뉜다.

 - 2.1) Local Repository : 개인 PC에 파일이 저장되는 개인 저장소

 - 2.2) Remote Repository : 원격 저장소 전용 서버에서 관리되며, 여러 사람들과 같이 공유도 가능한 저장소

 

3) Index (Staging Area)

 - Working Directory에서 Repository로 정보 저장 전 준비 영역

 - 파일 상태를 기록, 스테이징 한다고 표현 한다.

 - .git/index 파일로 관리된다.

 - 3.1) git add : Working Directory 에서 Index 영역으로 정보가 저장됨.

 - 3.2) git commit : Index영역에서 Repository로 정보가 저장됨.

 

4) Stash

 - 위의 3가지 영역과 다른 별개의 임시 영역

 - 임시적으로 작업사항을 저장해두고 나중에 꺼내올 수 있다.

▶ 1. git add

 - Index에 파일 추가 하는 명령어 이다.

   (unstacked files의 파일들, Changed but not updated 파일들을 스테이징에 add)

 - 옵션: -A, --all 변경된 모든 파일 추가

 - 신규 파일을 해당 폴더에 추가해 보자.

git status

 - git add 명령어 실행하기전 이기 때문에 Untracked files, 추적하지 않는 파일리스트에 노출 되는것을 볼 수 있다.

 

git add test.txt

git status

 - test.txt파일이 인덱스(Staging Area)에 포함 된 것을 확인할 수 있다.
 - 'Changes to be committed' 목록에 있는 파일들은 Staged 상태라는 것을 의미 한다.

 - 파일이 많은 경우엔 git add . 명령을 이용하여 해당 폴더의 Unstacked Files 모두 한번에 stage하는 것도 가능하다. (git add --all, git add -A)

git add .

▶ 2. git rm

1) --cached : Index에 추가된 파일을 staging area에서 제외(working directory의 파일은 유지)

2) -f, --force : 삭제하려는 파일의 내용이 브랜치 끝 부분에서의 내용과 다를 경우 강제 삭제

3) --ignore-unmatch : 삭제하려는 파일이 없을 때 발생하는 에러 무시

git rm --cached test.txt

▶ 3. git commit

 - 변경사항 확정에 사용하는 명령어이다.

 

3.1 git commit -m "커밋 메지" 

 - 스테이징 영역의 파일들을 커밋한다.

 - -m은 커밋메세지 옵션

 - 여러 줄의 커밋메세지는 여러개의 -m 을 사용하여 처리 가능 하다.

 

3.2 git commit -a : 자동으로 add를 진행한 후 커밋

 - 별도의 add명령어를 사용하지 않고 수정된 파일에 대해 add, commit을 한번에 수행한다.

 - 한번도 add되지 않은 파일은 add를 따로 작업 해줘야 한다.

 

3.3 git commit -am "커밋 메세지" : a, m의 옵션을 합친 형태.

 

3.4 git commit -v : 커밋 메세지에 diff의 내용 포함

 

3.5 git commit --amend : 최신 커밋 메세지를 수정하여 커밋 할 수 있다.(신규 커밋 메세지 추가 되지 않음)

 

git commit -m "커밋 테스트"

 

▶ 4. git log 

git log

 - git log : commit history 확인

 - Author 영역의 이름과 이메일 주소는 git config 명령을 통해 세팅했던 user.name / user.email 값이 표기 된다.

 

※ 옵션

-p : 변경사항 확인

--oneline : 커밋 메세지만 한줄씩 표시

--all : 모든 브랜치 로그 표시

--graph : 브랜치 트리 그래프 표시

※ Git은 각 커밋 마다 아이디를 부여하여 구별하는데 위 예제에서

commit 3965dff6525d151af526e5b45d144027532b8171 (HEAD -> master)

숫자로 되어있는 부분이 커밋 아이디, 커밋 해시라고 부른다.

 

 - 다만 위와 같이 커밋 로그를 보려면 매우 길어지고 보기 힘들기 때문에 git log 옵션중 pretty 옵션을 사용하여 더 이쁘게 볼 수 있다.

( 더 많은 pretty 확인 : https://git-scm.com/docs/pretty-formats)

git log --pretty=oneline

 - 이후 원하는 커밋 로그의 ID를 좀더 자세히 조회할 수 있다. (ID값이 겹치지 않는다는 가정하에 4자리~5자리 까지만 입력해도 조회 가능하다.)

git show 0ce5a

 - mavenCentral() => +//mavenCentral() : -기호의 빨간색이 이전 커밋, + 기호의 초록색이 이후 커밋 내용임을 간단히 확인 가능 하다.

 

▶ 5. git diff 

※ 옵션 : --staged

 - 마지막 커밋과 staging area의 차이 확인

※ 옵션 : 커밋ID 커밋ID : 두 커밋 ID간의 차이 확인

git diff 887c29 2ee97

 

※ 참고 : vscode 같은 편집  툴로 diff를 확인 할 수도 있다.

 - config 설정을 열어 준다.

git config --global -e

 - 다음과 같은 내용을 추가하고 저장 후 나온다.

[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code --wait --diff $LOCAL $REMOTE

 - git difftool 이라고 입력 하고 y를 입력한다.

 - 입력 시 터미널 창보다는 보기 쉬운 모습으로 변경사항을 확인할 수 있다.

 

▶ 6. git reset 

 - 과거 커밋으로 돌아가고 싶을때 사용한다.

 - 문법 : git reset [옵션] [커밋id]

 

옵션 / 영역
ex) git reset [옵션] abcd(커밋)
working directory staging area repository
--soft 바뀌지 않음 바뀌지 않음 Head가 abcd(커밋)를 가리킴
--mixed 바뀌지 않음 abcd(커밋)내용으로 변경 Head가 abcd(커밋)를 가리킴
--hard abcd(커밋)내용으로 변경 abcd(커밋)내용으로 변경 Head가 abcd(커밋)를 가리킴

 

1) git reset

 - 직전의 add 이전의 상태로 staging area를 되돌린다.

2) git reset --soft HEAD^

 - HEAD^는 현재 HEAD가 가리키고 있는 커밋의 바로 이전 커밋을 뜻한다.

 - HEAD~2 와 같이 ^대신 숫자가 올 수 있는데, 2와 같은 경우는 커밋보다 2단계 전의 커밋을 뜻한다.

3) git reset --hard 커밋ID

 - 특정 과거 커밋시점으로 working directory를 원복 한다.

 

▶ 7. git tag

 - 우리는 커밋 메세지를 통해 관련 정보를 남기고 있지만, 다른 커밋보다 좀더 중요한 경우 태그(tag)를 추가로 달 수 있다.

 - 문법 : git tag [태그 이름] [커밋 아이디]

 - 태그 리스트 조회 : git tag

 - 해당 태그 상세 조회 : git show 태그명

git tag portchange 887c2

 

다음엔 Local Repository에 Commit한 내용을 원격 저장소(Github 등)에 연결하고, push 하는 내용을 알아 보도록 해야 겠다.

반응형

댓글을 달아 주세요