나의 Git은 사실상 코드 저장소라서 한번은 깃을 제대로 써보고자 책을 읽었다.

밀리의 서재에 생각보다 개발 관련 도서가 많더라 ㅎㅎ

 

01. 깃 시작하기

01-1. 깃으로 무엇을 할 수 있을까?

  1. 버전 관리
  2. 백업
  3. 협업

 

01-3. 자주 사용하는 ls 명령 옵션 모음

  • -a : 숨김 파일, 디렉터리도 함께 표시
  • -l : 파일이나 디렉터리의 상세 정보를 함께 표시
  • -r : 파일의 정렬 순서를 거꾸로 표시
  • -t : 파일 작성 시간 순으로 내림차순 표시

 

리눅스에서 디렉터리를 나타내는 기호

  • ~ : 현재 접속 중인 사용자의 홈 디렉터리
  • ./ : 현재 사용자가 작업 중인 디렉터리
  • ../ : 현재 디렉터리의 상위 디렉터리

 

vim 편집기

ex 모드(저장, 종료 등) 

입력 모드(텍스트 입력, 수정)

두 모드를 I(insert)나 A(add)를 누르거나 / ESC를 눌러 바꿀 수 있음

 

I나 A키를 눌러 텍스트 입력이 끝난 후 파일을 저장할 때는 ESC키를 누르고 콜론(:)을 입력하여 ':wq' (w: 저장, q: 종료) 명령어를 입력한 뒤 엔터를 눌러 저장.

 

ex 모드에서 사용하는 명령은 콜론(:)으로 시작하고, 자주 사용하는 명령들은 다음과 같다

  • :w 또는 :write : 편집 중이던 문서를 저장
  • :q 또는 :quit : 편집기를 종료
  • :wq (파일명) : 편집중이던 문서를 저장하고 종료. 파일 이름을 함께 입력하면 그 이름으로 저장
  • :q! : 문서를 저장하지 않고 편집기를 조욜. 확장자가 .swp인 임시 파일이 생성

 

터미널 창에서 간단히 텍스트 문서의 내용을 확인하기

cat 명령 사용 (concatenate 연쇄하다의 줄임말)

> cat test.txt 

 


02. 깃으로 버전 관리하기

02-1. 깃 저장소 만들기

깃 저장소로 사용할 디렉토리에서 'git init' 명령을 입력하면, 깃을 사용할 수 있도록 해당 디렉터리를 초기화함.

 

02-2. 버전 만들기

깃에서 버전이란, 문서를 수정하고 저장할 때마다 생기는 것.

깃은 어떻게 파일 이름은 그대로 유지하면서 수정 내역을 기록하는가?

 

책에 있는 그림은 저작권이 무서워서 직접 ppt로 그린 그림

 

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

 

파일 hello.txt 문서를 수정하고 저장하면, 그 파일은 작업 트리에 존재. 수정한 hello.txt 파일을 버전으로 만들고 싶다면 스테이지에 넣음. 파일 수정을 끝내고 스테이지에 다 넣었다면 버전을 만들기 위해 깃에게 commit 명령을 내림. commit 명령을 내리면 새로운 버전이 생성되면서 스테이지에 대기하던 파일이 모두 저장소에 저장.

 

vim으로 실습

hello.txt 파일 생성 후 상태 보기

* 깃에서는 아직 한번도 버전 관리하지 않은 파일을 untracked files라고 부름

 

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

  • 깃에서 스테이징할 때 사용하는 명령은 'git add' 

git add hello.txt 명령어 수행 후 상태 보기

 

스테이지에 올라온 파일 커밋하기 (버전 만들기)

  • 깃에서 파일을 커밋하는 명령은 'git commit'

'git commit -m "msg1" ' 과 같이 -m 옵션으로 커밋과 함께 저장할 메시지를 적을 수 있음

커밋이 제대로 되었는지 git log로 확인해보자

 

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

* 한 번이라도 커밋한 적이 있는 파일을 다시 커밋할 때만 사용 가능

add와 commit을 동시에 처리하는 commit -am 옵션

 

02-3. 커밋 내용 확인하기

git log를 사용하여 커밋 메세지를 확인하거나, 변경 사항을 확인할 수 있는 명령어인 git diff를 사용하자

hello.txt를 수정한 뒤 git diff로 확인해본 모습

 

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

깃에서는 버전을 만드는 각 단계마다 파일 상태를 다르게 표시하므로, 파일의 상태를 이해하면 조금 더 수월!

 

  • tracked : 한번이라도 커밋을 한 파일이어, 수정여부를 계속 추적중인 파일
  • untracked : 한번도 깃에서 버전 관리를 하지 않아 수정 내역을 추적하지 않는 파일

tracked, untracked 파일들

 

각 커밋 메세지가 어떤 파일에 관련된 것인지 살펴보려면 'git log --stat' 옵션을 사용한다.

git log --stat 옵션

 

tracked 파일의 상태들

  • unmodified : 수정되지 않은 상태
  • modified : 파일이 수정만 된 상태
  • staged : 수정 뒤 스테이지에 올린 상태. (커밋 직전 단계)

git status 명령으로 확인 가능한 파일 상태들

 

* 방금 커밋한 메세지를 수정하려면 git commit --amend 명령어를 사용하면 됨

vim 편집기로 커밋 메세지를 수정할 수 있다

 

02-5. 작업 되돌리기

작업 트리에서 수정한 파일 되돌리기 - git restore (교재에서는 checkout을 소개하나, git 2.23 버전부터 기능이 세분화됨)

 

스테이징 되돌리기 - git restore --staged 파일 이름 (교재에서는 reset HEAD을 소개하나, git 2.23 버전부터 기능이 세분화됨)

 

최신 커밋 되돌리기 - git reset HEAD^ (이전 버전으로 아예 되돌리는 방법에는 revert를 더 권장한다고 한다. reset은 커밋 자체를 삭제해버리는 것이고, revert는 되돌리는 버전을 새로 커밋하는 것)

* 혼자 쓰는 깃이 아니라면 reset --hard는 지양하자...

 

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

나중에 사용할 것을 대비하여 커밋을 되돌리더라도 취소한 커밋을 남겨둘 때 사용

revert 명령을 실행할 떄는 커밋 메세지를 입력할 수 있도록 편집기가 열림. 커밋 메세지 맨 위에는 어떤 버전을 revert 했는지 나타나며, 추가로 남겨둘 내용이  있다면 입력하고 저장하기.

 

* reset의 경우에는 되돌아갈 커밋 해시를, revert의 경우에는 취소할 커밋 해시를 지정함!

 

 


03. 깃과 브랜치

브랜치란, 커밋을 가리키는 포인터와 비슷하다고 이해하자!

깃으로 버전 관리를 시작하면 기본적으로 master라는 브랜치가 생성되며, 사용자가 커밋할 때마다 master 브랜치는 최신 커밋을 가리킴.

새 브랜치를 만들면 기존에 저장한 파일을 master 브랜치에 그대로 유지하면서 기존 파일 내용을 수정하거나 새로운 기능을 구현할 파일을 만들 수 있음.

새 브랜치에서 원하는 작업을 다 끝냈다면 새 브랜치에 있던 파일을 원래 master 브랜치에 합칠 수 있음(merge)

 

새 브랜치 만들기

  • 깃에서 브랜치를 만들거나 확인하는 명령 : git branch
  • 새로운 브랜치를 만들 때 : git branch 브랜치명

브랜치 사이 이동하기 - git checkout

브랜치 분기

git checkout 브랜치명 을 사용하면 해당 브랜치 내에서 발생한 부분까지만 볼 수 있다. (현재 master에는 master content 4라는 커밋이 하나 더 있으나 apple 브랜치에서는 알 수 없다)

 

* git log --oneline : 로그를 한줄로 보여줌. 간편하다!

 

03-3. 브랜치 정보 확인하기

여러 브랜치에서 각각 커밋이 이루어질 때 커밋끼리 어떤 관계를 하고 있는지 확인하는 방법과 브랜치 사이의 차이점을 확인하는 방법을 알아보자.

 

* git log --oneline --branches : 각 브랜치의 커밋을 함께 볼 수 있음

 

각 브랜치별로 커밋상태가 다른 상황

 

* 브랜치와 커밋의 관계를 좀 더 보기 쉽게 그래프 형태로 표시하려면 --graph 옵션을 붙여 사용하면 된다.

git log --oneline --branches --graph

 

쓰다보니까 ,,, sourceTree 쓰고싶어졌다,,, 그치만 리눅스 익숙해질 겸 힘내보자,,,!

 

브랜치 사이의 차이점 알아보기

 

브랜치마다 커밋이 점점 쌓여갈수록 브랜치 사이에 어떤 차이가 있는지 일일이 확인하기 어려워질 수도 있다. 이럴 때는 브랜치 이름 사이에 마침표 두 개(..)를 넣는 명령으로 차이점을 쉽게 확인할 수 있다.

* 마침표 왼쪽에 있는 브랜치를 기준으로 오른쪽 브랜치와 비교한다.

master <-> apple 브랜치 비교

 

03-4. 브랜치 병합하기

만들어진 각 브랜치에서 작업을 하다가 어느 시점에서는 브랜치 작업을 마무리하고 기존 브랜치와 합해야 하는 경우가 생긴다. 이를 브랜치 병합(merge)라고 한다. 

 

  1. master 브랜치에서 work.txt 파일을 만들고 커밋한 뒤 새로운 branch o2를 만들어보자.
  2. master 브랜치에 master.txt 파일을 만들고 커밋한다.
  3. o2 브랜치로 체크아웃한 뒤, o2.txt라는 파일을 만들고 커밋한다.
  4. o2 브랜치에서 작업이 모두 끝났다고 가정하고, o2 브랜치의 내용을 master 브랜치로 병합해보자.
    1. 먼저 master 브랜치로 체크아웃해야한다.
  5. 브랜치를 병합하려면 git merge 뒤에 가져올 브랜치 명을 적는다. "git merge o2"

브랜치를 합쳐보자!

 

같은 문서의 다른 위치를 수정했을 때 병합하기 -> 알아서 잘 해준다 깃 최고!

 

같은 문서의 같은 위치를 수정했을 때 병합하기 -> 브랜치 충돌(conflict) 발생...!

work.txt의 동일한 부분을 수정했더니 발생한 conflict

conflict가 발생한 부분의 코드를 원하는 방향으로 수정한 뒤, 다시 commit 해주면 에러는 사라진다.

 

병합이 끝난 브랜치 삭제하기 - git branch -d 브랜치명

브랜치를 병합한 후 더 이상 사용하지 않는 브랜치는 깃에서 삭제할 수 있다. 단, 이렇게 브랜치를 삭제하더라도 이 브랜치가 완전히 지워지는 것은 아니며, 다시 같은 이름의 브랜치를 만들면 예전 내용을 다시 볼 수 있다. (흐름에서 감준다고 생각하자)

 

03-5. 브랜치 관리하기

수정 중인 파일 감추기 및 되돌리기 - git stash

파일을 수정하고 커밋하지 않은 상태에서 급하게 다른 파일을 커밋해야 하는 경우! 

 

여러 파일을 수정하고 따로 보관할 수 있으며, 감춘 파일은 stash list에서 확인 가능하다. (stack 방식)

git stash pop 명령을 입력하면 stash 목록에서 가장 최근 항목을 되돌린다. 

 

+ Recent posts