본문으로 바로가기

[Git] Git 기초 사용법 (Local Repository)

category TOOL/Git 2022. 8. 28. 14:47

0. 환경

  • m1 macbook
  • IntelliJ (Vscode 등 다른 툴을 활용해도 됩니다.)
  • git version 2.37.0

 

1. 프로젝트 디렉터리 생성

git-test라는 이름으로 디렉터리를 생성하여 IntelliJ로 열어줍니다.

 

추가적으로 IntelliJ로 프로젝트(디렉터리)를 열 경우에는 .idea 디렉터리가 생성되게 됩니다.

이 디렉터리는 Git에서 관여할 수 없도록 .idea 디렉터리에 .gitignore 파일에 내용을 추가하여 Git에서 관여할 수 없게 수정합니다.

# .idea dir all
/*

 

.gitignore

.gitignore의 경우에는 git 에서 무시할 수 있게(관리하지 않는) 설정 할 수 있는 파일입니다.

https://git-scm.com/docs/gitignore 참조

 

2. 프로젝트 Git 관리 시작

IntelliJ의 하단의 터미널을 열어 해당 프로젝트를 Git이 관리할 수 있도록 아래의 명령어를 사용해 Git 저장소를 생성합니다.

$ git init

git init

 

git init으로 Git 저장소를 생성하게 되면 .git 디렉터리가 프로젝트 내에 생성됩니다.

ll -al
total 8
drwxr-xr-x   5   staff   160B  8 27 23:11 .
drwx------@ 22   staff   704B  8 27 19:35 ..
drwxr-xr-x  12   staff   384B  8 27 23:12 .git
drwxr-xr-x   8   staff   256B  8 27 23:11 .idea

.git

(Mac의 경우 shift +command + . 키를 누르면 해당 폴더에 숨겨진 파일을 확인할 수 있습니다.)

 

3. Git 기본 최초 설정

아래의 명령어로 사용자 이름과 메일을 설정합니다.

$ git config --global user.name "이름"
$ git config --global user.email "이메일"

 

다음 명령어로 설정 한 값을 확인 할 수 있습니다.

$ git config --global user.name
????

$ git config --global user.email
????@gmail.com

 

다음 명령어로 기본 브랜치명을 변경합니다. (master main)

변경 이유는 master(주인)-slave(노예)를 상기시키기 때문에 main으로 변경 할 것을 권장합니다.

$ git config --global init.defaultBranch main

 

4. 파일 생성

Commit 실습을 위해 프로젝트 내에 자유롭게 파일을 생성하고 내용을 작성합니다.

(파일명 one.txt)

파일 생성

 

다음 명령어로 현재 프로젝트의 Git 상태를 확인합니다.

$ git status
현재 브랜치 main

아직 커밋이 없습니다

추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
        one.txt

커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 (추적하려면 "git add"를 사용하십시오)

생성한 파일이 Untracked File 상태로 Working Directory에 상태하고 있다는 내용을 알 수 있습니다. 

 

[Working Directory]

새로 파일이 추가 그리고 기존 파일이 수정삭제되는 수정사항이 만들어지면 위치하는 공간

 

[파일의 상태]

Untracked File : 추적하지 않는 파일
: Add 된 적 없는 파일(새로 추가된 파일), ingnore 된 파일

Tracked File : 추적하는 파일
: Add 된 적 있고 변경내역이 있는 파일

 

5. Working Directory Staging Area (git add)

이제 생성 된 파일을 git add 명령어를 이용해 Staging Area로 이동해봅니다.

$ git add one.txt

 

Git 상태를 확인해보면 Staging Area로 이동된 것을 알 수 있습니다.

$ git status
현재 브랜치 main

아직 커밋이 없습니다

커밋할 변경 사항:
  (스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
        새 파일:       one.txt

 

명령어 정리

Working Directory에 있는 단일 파일 add
$ git add (파일명)

Working Directory에 있는 파일 전체 add
$ git add .

[Staging Area] -> [Working Directory]
$ git rm --cached <파일>

 

[Staging Area]

파일을 옮기거나 압축을 하기 위해 존재하는 공간
커밋을 위한 준비 단계(작업을 위해 선택된 파일들)

 

6. Staging Area  Repository (git commit)

Staging Area 상태에 있는 파일을 commit 하여 Repository 상태로 이동해봅니다.

$ git commit -m "first commit message"

 

또는 아래와 같이 입력하게 되면 vi 편집 화면이 나오게 됨 편집 모드(i)로 들어가서 commit message를 작성하고 저장(:wq) 

$ git commit

 

커밋 내역을 확인해봅니다.

$ git log

git log

:q (나가기), j(아래), k(위)

 

IntelliJ의 경우에는 하단의 git탭을 눌러 GUI형태로 볼 수 있습니다.

(commit을 더 추가하여 확인)

 

git add + git commit

commit 하려는 모든 파일이 한 번이라도 add가 된적이 있는 파일인 경우(Tracked) add와 commit을 한 번에 할 수 있습니다.

$ git commit -am "add + commit"

 

7. 커밋 되돌리기(커밋 취소)

현재 위치에서 바로 이전 커밋으로 되돌리기(현재 커밋 취소), ^의 개수에 따라 여러 개의 이전으로 돌아 갈 수 있습니다.
$ git reset --option HEAD^

^말고 ~숫자로도 여러 개의 이전으로 돌아갈 수 있습니다.
$ git reset --option HEAD~5

특정 커밋 해시 상태로 돌아갈 수 있습니다.
$ git reset --option (commitHashValue)

 

--option

reset의 세 가지 옵션
 --soft: repository에서 staging area로 이동 (add 까지 된 상태)
 --mixed (default): repository에서 working directory로 이동 (add 되기 전 상태)
 --hard: 수정사항 완전히 삭제

 

예시

commit을 몇 개 더 만들고 실습 진행했습니다.

git reset

 

"second commit message" 커밋으로 돌아가 봅시다. (수정사항은 완전히 삭제합니다. --hard)

 

1. git log 또는 IntelliJ Git Tab을 이용하여 되돌리고자 하는 commit의 hash 값을 구합니다.

git log

 

2. reset 합니다. (commit hash 값은 전체를 다 복사해서 사용해도 되고 앞에서 8글자 정도만 복사해서 짧게 사용해도 됩니다.

$ git reset --hard 127992a8

 

다음과 같이 과거의 commit으로 reset 됩니다.

 

8. 커밋 복구하기

reset을 실수로 잘 못 했더라도 log에 다 기록되기 때문에 커밋을 복구할 수 있습니다.

다음 명령어를 이용하여 작업한 전체 내역을 확인해 볼 수 있습니다.

$ git reflog

git reflog

 

"fiveth commit message" commit을 다시 복구해봅니다. (좌측에 commit hash 값을 이용하여 reset 명령어를 활용하면 됩니다.)