[git] 깃으로 버전관리 하기

강주형·2023년 1월 17일
0

git과 Github 입문

목록 보기
2/2

깃 저장소 만들기

현재 디렉터리를 git 저장소로 만들기

$ git init

hello-git 이라는 디렉터리(폴더)를 만들고, 그 디렉터리를 git 저장소로 만드려면 이렇게 하면 되겠지?

$ mkdir hello-git
$ cd hello-git
$ git init

git 저장소로 만들면 그 디렉터리에 .git이라는 디렉터리가 생성되는데, 이건 숨김 처리 되어있음. 따라서 윈도우 탐색기에서는 숨김 파일 표시를 안 하면 보이지 않음


버전 만들기

git에서 버전은 문서를 수정하고 저장할 때 생기는 것임
우리가 보고서를 작성할 때,

보고서.docx
보고서_수정1.docx
보고서_최종.docx
보고서_최종_찐막.docx
...

이렇게 만들 때 얘네들이 버전이라고 보면 됨
저렇게 안 하려고 git을 쓰는 것!

  1. 작업 트리: 파일 수정, 저장 등의 작업을 하는 디렉터리 (작업 디렉터리)
  2. 스테이지: 버전으로 만들 파일이 대기하는 곳
  3. 저장소: 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳 (repository)

작업트리 -> 스테이지 -> 저장소 순으로 넘어가면서 '커밋'한다고 보면 됨

커밋(commit)은 git에서 버전을 만드는 것을 뜻함!

위에서 만든 hello-git 디렉터리가 작업 트리의 예시임 (눈에 보임)
스테이지와 저장소는 눈에 보이지 않음, 아까 말한 숨김 처리된 .git 디렉터리 안에 있음


git의 상태를 확인 하려면 이 명령어를 쓰면 됨

$ git status

예시

On branch main: 현재 main 브랜치에 있다.
No commits yet: 아직 커밋한 파일이 없다.
nothing to commit: 현재 커밋할 파일이 없다.

어떤 작업을 하면 저 문구들이 바뀌겠지?

1. 작업 트리

hello.txt라는 파일을 만들고 내용을 다음과 같이 해서 저장하자, 나는 vim을 써서 저장할 것

$ vim hello.txt
1

그럼 지금 작업 트리에 hello.txt가 있는 것!
($ git status 해보면 Untracked files라고 뜰 것)

Untracked files: git에서 아직 버전을 한 번도 관리하지 않은 파일이라는 뜻)

2. 스테이지

작업 트리에 파일을 생성했으니까 다음 순서는 스테이지로 올리는 것

스테이지에 올리는 것을 스테이징이라고 함, 명령어는 다음과 같음

$ git add hello.txt

이렇게 하면 hello.txt 파일이 스테이징됨
($ git status 해보면 Changes to be committed라고 뜰 것)

Changes to be committed: new file 수식어가 붙어있는 파일을 앞으로 커밋할 것이다.

3. 저장소

스테이징 영역에 있는 파일을 저장소로 옮기면 버전 만들기가 끝남
이것을 커밋이라고 함, 명령어는 다음과 같음

$ git commit -m "message1"

-m: 커밋 메시지를 남김 (message)

이렇게 하면 커밋하면서 "message1"이라는 메시지를 남길 수 있음


스테이징과 커밋을 동시에 할 수도 있음

$ git commit -am "message2"

또는

$ git commit -a -m "message2"

-a: 스테이지에 올리는 동시에 커밋도 하겠다. (all)


커밋 내용 확인하기

버전 확인은 아래 명령어로 가능

$ git log

예시


변경 사항을 확인하려면 아래 명령어

$ git diff

어떤 내용이 추가되고 삭제되었는지 확인 가능


버전 만드는 단계마다 파일 상태 알아보기

아래 명령어를 사용하면 화면에 파일 상태와 관련된 여러 메시지가 나타남

$ git status

tracked 파일: 한 번 이상 커밋한 적이 있어서 계속해서 수정사항이 있는지 추적함
untracked 파일: 한 번도 커밋하지 않아서 수정 내역을 추적하지 않음

tracked 파일과 untracked 파일을 모두 스테이지에 올렸을 때 ($ git add ~)

  • modified: 마지막 버전 이후 수정 사항이 있음
  • new file: 한 번도 버전 관리를 하지 않은 파일

$ git status를 했을 때, working tree clean이라고 나오면 현재 작업 트리에 있는 모든 파일의 상태가 unmodified 라는 것

커밋 히스토리를 보려면 $ git log를 사용하면 되는데, 뒤에 --stat을 붙여주면 커밋과 관련된 여러 통계를 같이 보여줌

$ git log --stat

작업 되돌리기

작업 트리에서 수정한 파일 되돌리기

$ git restore hello.txt

이건 스테이지에 올리기 전에 작업 트리에 있는 파일을 대상으로 사용하는 것!


스테이징을 되돌리기

$ git restore --staged hello2.txt

뒤에 파일이름 없이 --staged만 붙이면 스테이지에 있는 모든 파일을 한꺼번에 되돌릴 수도 있음!

최신 커밋 되돌리기

스테이징 후 커밋까지 했을 때 가장 최신의 커밋 되돌리기

$ git reset HEAD^

여기서 HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋을 가리키는 것!

되돌린 후 $ git log로 확인이 가능함 (커밋 전에 했던 스테이징도 함께 취소됨)

특정 커밋 되돌리기

앞에서 한 건 최신 커밋을 되돌린 거고 그거 말고, 원하는 버전으로 되돌린 후 그 이후 버전을 지울 수도 있음

$ git reset --hard 커밋해시

커밋해시값은 $ git log를 했을 때,
commit 2290561a7fadffd04c641e3654d0fa8bb22c0cb7 <- 이 영어/숫자 조합임

주의할 점은 해당 커밋해시를 리셋한다는 게 아니라 최신 커밋을 해당 커밋해시로 리셋한다는 것!

커밋 변경 이력 취소하기

커밋을 되돌릴 때, 이후 버전을 삭제해도 되면 $ git reset을 쓰면 되지만, 나중에 사용할 것을 대비해서 커밋 기록을 남겨야할 때도 있음
이때, 이 명령어를 사용함

$ git revert 커밋해시

커밋을 삭제하면서 버전을 남겨둘 커밋해시를 입력하는 것!

profile
Statistics & Data Science

0개의 댓글