관리자 글쓰기
git 명령어 정리
2022. 11. 8. 22:48 - pingu-s

Mac OS 기준 homebrew에서 설치 가능, Windows는 git 사이트에서 .exe 파일 다운로드 후 설치

Homebrew

Install homebrew if you don't already have it, then:
$ brew install git

 

git 사이트: https://git-scm.com

 

Git

 

git-scm.com

 

잘 설치가 됐다면 터미널에서 git을 입력하면 git 명령에 대한 설명이 나타난다.

 

$ git

깃에 사용자 정보를 설정하려면 git config 명령과 --global 옵션으로 모든 저장소에서 같은 사용자 정보를 사용하도록 설정할 수 있다.

 

$ git config --global user.name "jongin"
$ git config --global user.email "ppj7515@gmail.com"

 


 

깃 초기화하기 - git init

 

$ git init

깃에서 버전을 만드는 단계?

 

작업 트리 → 스테이지  저장소

 

작업 트리(working tree): 작업 디렉터리(working directory)라고도 한다. 앞에서 만들었던 hello-git 디렉터리가 작업 트리가 된다. 즉, 우리 눈에 보이는 디렉터리가 바로 작업 트리.

스테이지(stage): 버전으로 만들 파일이 대기하는 곳, 스테이징 영역(staging area)이라고도 한다. 예를 들어, 10개의 파일을 수정했는데 4개의 파일만 버전으로 만들려면 4개의 파일만 스테이지로 넘기면 된다.

저장소(repository): 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳이다.

 

스테이지 내용 파일 .git/index, 저장소 내용 파일 .git/HEAD

 

깃 상태 확인 - git status

 

$ git status

작업 트리에서 파일을 만들거나 수정했다면 스테이지에 수정한 파일을 추가한다.

수정한 파일을 스테이징 하기 - git add

cf) git add  명령 뒤에 파일 이름 대신 마침표(.)를 붙이면 작업 트리에서 수정한 파일들을 한꺼번에 스테이지에 올릴 수 있다.

 

$ git add hello.txt

파일이 스테이지에 있다면 이제 버전을 만들 수 있다. 깃에서는 버전을 만드는 것을 간단히 '커밋(commit)한다'고도 말한다.

스테이지에 올라온 파일 커밋하기 - git commit

 

$ git commit -m "message1"

 

-m  옵션을 붙여 커밋과 함께 저장할 메시지를 적을 수 있다.

저장소에 저장된 버전 확인 - git log

 

$ git log

 

스테이징과 커밋 한꺼번에 처리하기 - git commit -am

 

$ git commit -am "message2"

 

(단, 이 방법은 한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때만 사용 가능)

변경 사항 확인하기 - git diff

 

$ git diff

여기서 나타난 '-2'는 최신 버전과 비교할 때 hello.txt 파일에서 '2'가 삭제되었다는 뜻이다. 그다음에 나타난 '+two'는 hello.txt 파일에 'two'라는 내용이 추가되었다는 뜻이다.

 

tracked 파일, untracked 파일

한 번이라도 커밋을 한 파일 → tracked file

한 번도 커밋을 안 한 파일 → untracked file

git status로 보면 tracked file은 modified:로 untracked file은 new file:로 나눠지게 된다.

 

커밋에 관련된 파일까지 함께 살펴보려면 git log 명령에 --stat 옵션을 사용한다.

 

$ git log --stat

'Enter'를 누르면 다음 로그 화면을 볼 수 있고, 'Q'를 누르면 로그 화면을 빠져나와 깃 명령을 입력할 수 있다.

 

깃의 버전 관리에서 제외하고 싶다면 .gitignore 파일을 생성해 commit 하면 된다.

맥에서는 .DS_store 시스템 파일이 자동 생성되는데 .gitignore로 제외시키면 깔끔해진다.

 

unmodified, modified, staged 상태

 

unmodified: 작업 트리에 있는 모든 파일이 수정되지 않은 상태이다. (message: 'working tree clean')

modified: 파일이 수정만 된 상태이다. (message: 'Changes not stage for commit:')

staged: 커밋 직전 단계(커밋할 변경 사항이 있음) (message: 'Changes to be committed:')

커밋을 끝내고 난 후 hello2.txt 파일의 상태는 수정이 없던 unmodified로 돌아간 것을 볼 수 있다.

커밋 메시지를 잘못 입력했다면 커밋을 만든 즉시 커밋 메시지를 수정할 수도 있다.  가장 최근의 커밋 메시지를 수정하려면 git commit 명령에 --amend를 붙인다.

 

$ git commit --amend

 

작업 트리에서 수정한 파일 되돌리기 - git restore 파일이름 or git checkout -- 파일이름

cf) checkout으로 되돌린 내용은 다시 복구할 수 없다.

 

$ git restore hello.txt

스테이징 되돌리기 - git restore --staged 파일이름 or git reset HEAD 파일이름

cf) HEAD 다음에 파일 이름을 지정하지 않으면 스테이지에 있는 모든 파일을 되돌린다.

 

$ git restore --staged hello2.txt

최신 커밋 되돌리기 - git reset HEAD^

HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋을 가리킨다. 이렇게 되돌리면 커밋도 취소되고 스테이지에서도 내려진다. 취소한 파일이 작업 트리에만 남게 된다.

cf) 최근 3개의 커밋을 취소하려면 $ git reset HEAD~3

 

$ git reset HEAD^

참고) git reset 명령 옵션

명령 설명
--soft HEAD^ 최근 커밋을 하기 전 상태로 작업 트리를 되돌린다.
--mixed HEAD^ 최근 커밋과 스테이징 하기 전 상태로 작업 트리를 되돌린다. 옵션 없이 git reset 명령을 사용할 경우 이 옵션을 기본으로 작동한다.
--hard HEAD^ 최근 커밋과 스테이징, 파일 수정 하기 전 상태로 작업 트리를 되돌린다. 이 옵션으로 되돌린 내용은 복구할 수 없다.

 

특정 커밋으로 되돌리기 - git reset 커밋 해시

reset A를 할 경우 A 커밋 이후에 만들었던 커밋을 삭제하고, A 커밋으로 이동하겠다는 의미이다.

R2 메시지가 붙은 커밋으로 되돌려본다면 git log 명령의 결과 화면에서 R2 커밋의 커밋 해시를 복사한다.

git reset 명령 다음에 --hard 옵션까지 입력한 후 복사한 커밋 해시를 붙여 넣는다. 그리고 Enter를 누른다.

 

$ git reset --hard 복사한 커밋 해시

cat rev.txt로 파일을 확인해 보면 내용까지 바뀐 것을 확인할 수 있다.

 

커밋 삭제하지 않고 되돌리기 - git revert

가장 최근에 커밋한 R5 버전을 취소하고, R5 직전 커밋 R2로 되돌아가려고 할 때, revert 명령의 경우에는 revert 명령 뒤에 취소하려고 하는 버전, 즉, R5의 커밋 해시를 지정한다.

reset의 경우에는 취소할 커밋의 해시가 아니라 되돌아갈 커밋 해시를 지정, revert의 경우에는 취소할 커밋 해시를 지정

 

$ git revert 복사한 R5 커밋 해시

방금 취소한 R5 커밋은 rev.txt 문서에 영문자 'e'를 추가한 것이었다. cat rev.txt로 파일을 확인해 보면 추가했던 'e'가 없어진 것을 볼 수 있다.

 

 

출처: 고경희, 이고잉. 2019. Do it! 지옥에서 온 문서관리자 깃&깃허브 입문. 이지스퍼블리싱

'개발 > 기타' 카테고리의 다른 글

local repository를 github에 연동  (0) 2022.11.11
git 명령어 정리2  (0) 2022.11.10