TIL 8 | [Git & Github] 커밋하기

Yoonsik·2022년 3월 3일
0

Git & Github

목록 보기
3/7

📄 커밋이란?

깃은 개발중인 코드의 이력을 만들 수 있다. 깃이 코드 변화를 기록하는 것을 커밋(commit)이라고 한다.
깃의 동작과 가장 유사한 commit의 사전적 의미로는 '~을 적어두다'가 있다. 즉, 커밋은 의미있는 변경 작업들을 저장소에 기록하는 동작이다.

Git의 Workflow

Git을 이해하는데 있어, Git의 흐름(Workflow)을 아는 것은 정말 중요하다고 생각한다.
드림코딩 엘리 님의 설명을 참고하여 알아보겠다.

먼저, Git 작업환경을 크게 그림으로 시각화 하여 나타내면 이런 모습이다.

  • Local
    - 현재 내가 사용중인 컴퓨터(PC)의 로컬 저장소
    • Working directory - 프로젝트의 파일을 수정하는 공간 (작업공간) 이다. 이곳에서는 파일을 TrackedUntracked이렇게 2가지로 분류하는데, Tracked파일은 Git이 관리한적 있거나 관리하고 있는 파일이고, Untracked파일은 Git의 관리에 들어간적이 없는 파일이다.
      git add [파일이름] 명령을 이용하여 원하는 파일(버전 히스토리에 저장할 준비가 되어있는 파일)을 Staging area로 옮길 수 있다.

    • Staging area - 버전 히스토리에 저장할 준비가 되어있는 file들을 옮겨 놓는 곳이다. commit 명령을 이용하여 현재 Staging area에 있는 파일들을 .git directory에 저장한다.

    • .git directory - 버전의 히스토리를 저장하는 곳이다.

      • 이렇게 .git directory에 저장된 버전들은 checkout 명령어를 통해 원하는 버전으로 돌아갈 수 있다.
  • Remote
    - 내 로컬PC 저장소가 아닌, 네트워크 상의 다른 위치에 존재하는 원격 저장소. Ex) Github

    • 내 로컬PC 저장소에 있는 깃 히스토리들은 내 컴퓨터에서만 보관되기 때문에 컴퓨터의 문제 발생 시, 모두 잃어버릴 수 있다.
      이러한 불상사를 막기 위해 .git directory를 push 명령을 이용하여 Github와 같은 원격 저장소(Remote Repository)에 업로드 해 놓는다.

    • 원격저장소에 업로드한 버전들은 필요할 때 pull 명령을 이용하여 다시 로컬로 이동시킬 수 있다.

add 명령 - Working directory에서의 변경사항들을 Staging area에 담기

  • 변경사항 확인(Git에서의 상태를 나타낸다) : git status
    - untracked 파일 : Git이 추적하지 않는 파일 (Git의 관리에 들어간적이 없는 파일)

  • 파일 하나 담기 : git add [파일이름]

  • 모든 파일 담기 : git add .
    - . 은 '모든(전체)'를 의미한다.


💻실습

1) 변경사항 확인 - git status 명령으로 Git이 관리하게 될 파일 조회 및 변경사항 확인을 한다.

그럼, 다음과 같이 Untracked files.gitignore, lions.yaml, tigers.yaml이 출력된다. 이 파일들은 아직 Git이 추적하고 있지 않은 파일 즉, Git의 관리에 들어간적이 없는 파일들이다.

  • 지금 상태를 그림으로 나타내면 다음과 같다.

2) 파일 하나 담기 - git add lions.yaml 명령으로 lions.yaml파일을 Staging area에 옮긴다.

실행한 뒤, git status 명령으로 현재 Git에서의 상태를 조회해 보면 다음과 같이 Changes to be committed: 에 초록색으로 new file: lions.yaml이 출력된다. 해당 파일이 커밋할 준비가 되었다는 뜻이다.

  • 이 상태도 마찬가지로 그림으로 나타내면 다음과 같다.

3) 모든 파일 담기 - git add . 명령으로 아직 Staging area에 옮겨지지 않은 Working directory의 나머지 모든 파일들을 Staging area에 옮긴다.

마찬가지로 실행한 뒤, git status 명령으로 현재 Git에서의 상태를 조회해보면, .gitignore, lions.yaml, tigers.yaml 이 모든 파일이 커밋할 준비가 되었다는 것(Staging area에 옮겨졌다는 것)을 알 수 있다.

  • 그림으로 나타내면 다음과 같다.

commit 명령 - Staging area의 파일들을 .git directory로 보내기 (새로운 버전으로 만들기)

  • 커밋하기 : git commit
    해당 명령 사용시, vi 입력 모드로 진입하게 된다. 이때, 작업에 필요한 몇가지 명령어를 정리해 보겠다.
작업명령상세
입력 시작i명령어 입력 모드에서 텍스트 입력 모드로 전환한다.
입력 종료ESC텍스트 입력 모드에서 명령어 입력 모드로 전환한다.
저장없이 종료:q
저장없이 강제종료:q!입력한 것이 있을 때 사용한다.
저장하고 종료:wq입력한 것이 있을 때 사용한다.
위로 스크롤kgit log 등 명령 사용시, 내역이 길때 사용한다.
아래로 스크롤jgit log 등 명령 사용시, 내역이 길때 사용한다.
i 명령을 이용하여 커밋 메세지를 작성한 뒤, :wq명령을 이용하여 저장하고 종료한다. 
통상적으로, 프로젝트의 첫 버전이 만들어졌을 때 사용하는 커밋메세지로는 'First Commit'을 사용한다.
  • 커밋 메세지까지 함께 작성하여 커밋하기 : git commit -m "커밋 메세지"

  • 커밋이 잘 되었는지 확인 : git log 명령이나 소스트리를 통해 확인 가능하다.

💻실습

1) 커밋하기 - git commit 명령으로 터미널을 vi모드로 변환한다. 그리고, i 명령을 이용하여 명령어 입력 모드에서 텍스트 입력 모드로 변환한다. 그 다음, 커밋 메세지 'First Commit'을 입력한 뒤, :wq 명령으로 저장하고 종료한다.
한번에 커밋 메세지까지 작성하여 커밋하고 싶으면 git commit -m "First commit" 명령을 사용한다.

2) 커밋이 잘 되었는지 확인하기 - git log 명령을 이용하면 다음과 같이 커밋의 SHA-1 체크섬, 저자 이름, 저자 이메일, 커밋한 날짜, 커밋 메세지를 보여준다.

소스트리에서도 다음과 같이 커밋이 완료된것을 확인할 수 있다.

  • 지금 상태를 그림으로 나타내면 다음과 같다.

변경사항을 만들고 커밋하기

📢 <변경사항>

  • 첫 번째 커밋 - Tigers의 members에 George 추가
    - 커밋 메세지 : Add George to Tigers

  • 두 번째 커밋 - cheetas.yaml 추가
    - 커밋 메세지 : Add team Cheetas

  • 세 번째 커밋 - cheetas.yaml 삭제

  • Leopards의 manager를 Nora로 수정

  • panthers.yaml 추가
    - 커밋 메세지 : Replace Cheetas with Panthers


💻실습

1) 첫 번째 커밋 - Tigers의 members에 George를 추가한 뒤, git staus 명령으로 현재 상태를 확인한다.

그럼, 다음과 같이 수정된파일(modified)로 tigers.yaml이 출력된다. 좀 더 구체적으로 수정 내용을 보기 위해선 git diff 명령을 사용한다.

git diff 명령을 사용하면 이처럼 더욱 구체적인 수정 내용이 출력된다. 확인이 끝나면 q 명령으로 나간다.

확인이 끝났으면 커밋을 해보자. git commit -am "커밋 메세지" 명령을 이용하여 addcommit 명령을 한꺼번에 사용할 수 있다. (새로 추가된 파일(Untracked file)이 없는 경우 한정)

커밋이 잘 되었는지 git log 명령으로 확인해보면, 아래와 같이 저장소의 커밋 히스토리를 시간순으로 보여준다. 즉, 가장 최근의 커밋이 가장 먼저 나온다. 그리고 이어서 각 커밋의 SHA-1 체크섬, 저자 이름, 저자 이메일, 커밋한 날짜, 커밋 메시지를 보여준다.

나머지 두 번째 커밋, 세 번째 커밋 모두 하는 방법은 같기 때문에 생략하였다. 세가지 변경사항 모두 커밋하고 잘 되었는지 git log 명령을 이용하여 조회해보면, 다음과 같이 시간순으로 출력된다.

소스트리에서 확인해보면 다음과 같다


profile
꾸준함의 힘

0개의 댓글