[Git 설치 및 초기설정, Git 명령어] Git으로 버전 관리하기

2022. 6. 28. 15:00etc

git 설치 및 초기 설정

 

$ brew install git

brew를 이용해서 git을 설치

 

$ git

깃 설치가 정상적으로 되었는지 확인

git의 help 페이지가 나오게 된다

 

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

commit 할 때 여기서 등록한 이름과 이메일이 사용된다

 

 


repository 생성

 

$ git init

자신이 원하는 곳에 directory를 하나 만들고, 해당 directory에 들어가서 git init 명령어 입력하면

해당 디렉터리에 버전이 저장될 'repository(저장소)'가 생성

 

 

$ ls -la

숨김 파일을 보게 되면 .git 파일이 생성되어 있을 것임

.git 파일을 통해 stage와 repository 파일을 관리

 

 

 

 

 

 

작업 트리 (working tree, working directory)

스테이지 (stage, staging area) : .git/index 파일에 저장

저장소 (repository) : .git/HEAD 파일에 저장

 

 

stage ---> 'commit' ---> repository

commit을 하면 새로운 버전 생성

 

$ git status

git의 상태를 보는 명령어

 

"on branch master"

현재 master branch에 있음

"no commits yet"

아직 commit 한 파일이 없음

"nothing to commit"

현재 commit 할 파일이 없음

"untracked files"

한 번도 버전 관리하지 않은 파일

 

 


add (staging)  &  commit

 

$ git add [파일이름]

working directory ---> 'add' ---> staging area

- staging 한다

- stage에 올린다

 

 

$ git status

 

 

add 후 stage에 올라간 파일

changes to be committed, new file

새 파일 test.txt를 앞으로 커밋할 것이다

 

add 후 파일이 stage에 올라간 파일

 

$ git commit -m "message1"

 

commit과 함께 저장할 message 작성

stage에 있던 파일에 대해 버전을 생성한다 (commit 한다)

 

 

commit이 정상적으로 되었다는 문구가 나옴

 

$ git status

commit 후 git의 상태를 보면 다음과 같다

 

nothing to commit

커밋할 파일이 없다 (버전으로 만들 파일이 없다)

working tree clean

working directory의 모든 파일이 수정사항 없음

 

$ git log

 

commit 후 git log

커밋한 버전에 대한 설명 (hash, HEAD가 가리키고 있는 것)

커밋한 유저 이름, 유저 이메일

커밋한 시간

커밋 메시지

 

 

 

commit 후 파일이 repository에 올라감

 

 

$ git commit -am "message2"

 

staging과 commit을 한 번에 처리

이전에 commit 한 적이 있던 파일에 대해서만 가능

 

 

 

 

 

commit 후 working directory의 파일이 변경되었을 때  '$ git status'로 git 상태를 보면 다음과 같다

commit 후 woring tree의 파일이 변경되었을 경우 status

changes not staged for commit

파일의 수정사항이 스테이징 되지 않았다

 

 

 

$ git diff

git diff 출력 내용

working tree에서 변경된 사항이 repository(저장소)에 있는 버전과 비교했을 때, 어떤 코드가 다른지 알려준다

repository에 있는 파일의 hello가 hi로 변경되었다

 


 

tracked 파일, untracked 파일

 

 

tracked 파일

- 한 번이라도 commit 된 적이 있던 파일

- git이 지속적으로 수정 여부를 추적하고 있음

 

untracked 파일

- commit 된 적이 없던 파일

- git이 추적하지 않음

 

 

$ git add .

 

.(콤마)를 통해 현재 디렉터리에 있는 모든 파일을 한 번에 staging 할 수 있음

 

stage에 여러 파일이 있을 경우

한 번에 여러 파일을 commit 하면 어떤 파일을 commit 하였는지 상세하게 나오지 않음 (commit 했던 log만 출력된다)

 

 

$ git log --stat

이 명령어를 통해 commit log와 함께 어떤 파일이 commit 되었는지 볼 수 있다

 

제일 위 log에서 test.txt, test2.txt 두 개의 파일이  commit된 것을 볼 수 있음

 

 


 

버전 관리에서 제외시키기 (.gitignore)

 

버전 관리 중인 디렉터리 안에 버전 관리를 하지 않을 특정 파일, 디렉터리가 있으면 .gitignore 파일에 그 파일을 작성하면 된다

.gitignore 파일에 다음과 같이 작성하면 됨

test.txt	# text.txt 파일을 버전 관리에서 제외
test/ 		# test 디렉터리를 버전 관리에서 제외
.txt		# 모든 .txt 파일을 버전 관리에서 제외

 


 

버전 만드는 단계에서 파일의 상태

 

상태

"그 상태에서의 메시지"

 

unmodified

"nothing to commit, working tree clean"

 

modified

"Changes not staged for commit"

 

staged

"Changes to be committed"

 

commit

"nothing to commit, working tree clean"

 

 

 

$ git commit --amend

가장 최근 커밋한 메시지 수정

 

 


작업 되돌리기

 

$ git checkout -- [파일이름]

working directory 변경사항 되돌리기

 

 

$ git reset HEAD [파일이름]

unstaged

파일 이름을 입력하지 않으면 stage에 있는 모든 파일이 unstaged 됨

 

 

$ git reset HEAD^

HEAD^ : HEAD가 가리키는 브랜치의 최신 commit을 의미

HEAD -> master : HEAD가 가리키는 브랜치

가장 최신 commit이 취소되어, working directory로 돌아감

 

unstaged changes after reset

commit 취소 및 unstaged

가장 마지막 commit도 삭제될 뿐만 아니라 stage에 올려져 있던 파일도 unstaged 된다

 

 

$ git reset --hard [commit hash]

commit hash에 해당하는 commit이 가장 최신 commit으로 변경된다

 

 

$ git revert [commit hash]

가장 최근 commit을 삭제하는 것이 아니라 취소하는 명령어

커밋을 삭제하지 않고 남겨둔다

revert를 하면 vi에디터가 나오는데, revert 메시지를 남기면 된다

 

$ git log

git log에서 "This reverts commit" message가 출력

 

 

 

 

 

 

 

 

'etc' 카테고리의 다른 글

Git, Github 연결 및 사용법  (0) 2022.07.14
Git & Branch  (0) 2022.07.04
vim setting  (0) 2022.05.31