이 영역을 누르면 첫 페이지로 이동
Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

페이지 맨 위로 올라가기

Coding Groot

코딩 블로그

Stage it! Commit할 파일을 선택해보자 :: git add [파일명]

  • 2020.07.07 16:04
  • Git/Git Tutorial
글 작성자: Coding Groot

Git 튜토리얼 4

Commit할 파일을 선택해보자!

Git의 핵심은 Commit입니다. Commit한다는 것은 실제로 그 버전을 기록한다는 뜻입니다.
Commit하기 전에 우리는 먼저 Commit할 파일을 선택해줘야 합니다. 우리는 그것을 Stage에 올린다고 표현합니다. 무대에 있는 주인공들만 실제로 기록이 되는 것입니다.


바로 Commit하면 되지 왜 굳이 Commit할 파일을 선택하는 단계가 있을까요? 

다음의 상황을 가정해봅시다. 

git-practice라는 Git 저장소를 만들었습니다. 그 저장소에 실제 프로그램인 Program_A.txt, Program_B 파일과 제가 임의로 여러 가지를 시도해보려고 만든 테스트용으로 만든 Test.txt 파일이 있습니다.

Commit할 파일을 선택하지 않고 파일을 모두 저장하게 한다면? 

저장소 안의 모든 파일을 Commit하게 되면 프로그램과 전혀 관계없는 Test.txt와 같은 파일도 저장하게 됩니다. 나중에 이게 쌓이고 쌓인다면 저장소도 난잡해지고 협업할 때도 이상한 파일이 보이면 불편합니다. 그렇다고 Test.txt 파일을 Commit할 때 저장소 밖으로 계속 옮기는 것도 귀찮습니다. Git은 이것을 Commit하기 전에 Stage라는 별도의 단계를 둬서 해결했습니다.


Git의 방식: 먼저 필요한 파일을 선택하고 그 파일만 Commit합니다

Git은 Commit할 파일을 선택해서 Staging Area에 올립니다. 그리고 Staging Area에 있는 파일만 Commit합니다.


한번 직접 Staging Area에 올려서 Commit할 파일을 선택해봅시다

Staging Area에 올리는 것을 Stage한다라고 합니다. 파일을 Stage하는 여러 가지 방법을 알려드리겠습니다. 핵심은 git add 명령어입니다.


파일을 하나씩 Stage하는 Git 명령어

git add [파일명]

git status 명령어로 현재 저장소의 상황을 알아봅시다.

git status로 현재 저장소에 있는 파일들의 상태를 확인했다

현재 Program_A.txt, Program_B.txt, Test.txt라는 파일들이 새로 들어와서 Untracked files로 분류되어 있는 것을 확인할 수 있습니다.

저는 테스트용으로 만든 Test.txt를 관리하고 싶지 않습니다. Program_A.txt와 Program_B.txt만 Commit하고 싶습니다. 그래서 Program_A.txt와 Program_B.txt만 Stage하겠습니다. 

다음처럼 git add 명령어로 파일을 하나하나 Stage할 수 있습니다.

git add Program_A.txt, git add Program_B.txt

Staging Area에 있는 파일은 Changes to be committed로 분류되고 이제 막 관리되기 시작한 파일이기 때문에 new file로 앞에 출력됩니다.


Stage한 파일을 Staging Area에서 내리는 Git 명령어

Staging Area의 어떤 파일 다시 내리는 것을 Unstage한다라고 합니다. 방금 Stage한 Program_A.txt, Program_B.txt를 Unstage해보겠습니다. 

Program_A.txt와 Program_B.txt를 Unstage했다

Program_A.txt, Program_B.txt가 다시 Untracked file로 돌아간 것을 볼 수 있습니다.


파일 여러 개를 Stage하는 Git 명령어

Program_A.txt, Program_B.txt 두 개만 있다 상관없지만 만약에 Program이 여러 개라면 일일이 Stage를 해주는 것이 상당히 귀찮은 작업일 것입니다. 아래의 형태로 git add를 하면 여러 파일을 한방에 Stage할 수도 있습니다.

git add [파일명1] [파일명2] ... [파일명n] 

한번 Program_A.txt, Program_B.txt 모두 한방에 Stage해보겠습니다. 

git add Program_A.txt Program_B.txt

git status 명령어를 통해 두 파일 다 잘 Stage된 것을 확인할 수 있습니다.


그 외의 Stage할 때 자주 쓰는 Git 명령어

1. 저장소 안의 모든 파일을 Commit하고 싶을 때도 많습니다. 파일이 10개가 넘어가면 매번 git add 명령어로 파일들을 명시해주는 것도 귀찮습니다. 그럴 때 자주 사용하는 저장소 안에 모든 파일들을 Stage하는 명령어입니다. (아마 가장 많이 사용할 명령어일겁니다)

git add -A

git add -A

저장소 안에 있는 모든 파일들이 Stage된 것을 확인할 수 있습니다.


2. 어떤 폴더 안의 파일들을 모두 Stage하고 싶을 때도 많습니다. 그럴 때 자주 사용하는 명령어입니다.

git add [폴더명]

새로운 상황을 가정해서 설명해보겠습니다.

기존의 Git 저장소의 모든 파일을 Unstage하고 NewFolder 폴더를 생성했습니다. 그리고 그 폴더 안에 Program_C.txt와 Program_D.txt를 새로 추가했습니다.

현재 저장소의 상태를 먼저 보여드리겠습니다.

git status
"git status NewFolder/"로 NewFolder 안의 파일들의 상태도 확인할 수 있다. 

기존의 상황에 추가로 NewFolder 안에는 Program_C.txt, Program_D.txt도 Untracked된 상태로 존재합니다. 

만약 저장소 안의 모든 파일을 Stage하고 싶으면 git add -A 명령어를 사용하면 됩니다. 하지만 NewFolder 안의 파일들만 사용하고 싶다면 다음과 같이 명령어를 사용하면 됩니다.

git add ./NewFolder/

.은 현재 디렉터리를 뜻합니다. 따라서 위 명령어는 현재 디렉터리 아래에 NewFolder 아래에 있는 모든 파일을 Stage하라는 명령어입니다.

git add ./NewFolder/

실행 결과를 git status로 확인해보니 NewFolder 아래의 파일인 Program_C.txt와 Program_D.txt만 Stage된 것을 알 수 있습니다.


3. 이 명령어는 뭘까요?

git add .

현재 Working Directory 아래의 모든 파일을 Stage하라는 명령어입니다. 현재 Working Directory가 Root(Git 저장소의 최상위 디렉터리, 즉 .../git-practice/)이면 git add -A와 동일한 역할을 합니다. 만약 현재 Working Directory에서 cd NewFolder를 해서 .../git-practice/NewFolder/이면 git add ./NewFolder/와 동일한 역할을 합니다.


Staging Area와 index 파일

Staging Area를 index라고도 부릅니다. 왜 그럴까요?

Commit될 파일들의 목록은 실제로 .git 폴더 안의 index 파일에 저장됩니다. 그래서 흔히 git add [파일명] 또는 Stage한다는 것을 index에 기록한다고 표현합니다. index는 그냥 출력해서 읽은 순 없기 때문에 git이 제공해주는 특별한 명령어로 읽어야 합니다.

index 파일을 출력하는 명령어입니다.

git ls-files --stage

한번 직접 .git/index 파일을 출력해봅시다.

git ls-files --stage로 index 파일을 읽어보았다

git status 명령어의 결과를 보면 현재 Program_C.txt와 Program_D.txt 파일이 Stage된 것을 알 수 있습니다.

cat 명령어(일반적인 Text 파일의 내용을 출력해주는 명령어)로는 index 파일을 읽을 수 없습니다.

git ls-files --stage 명령어를 사용하면 index 파일을 Git이 잘 읽어줍니다. 결과를 보시면 현재 Commit하려고 추적 중인 파일인 Program_C.txt와 Program_D.txt 파일의 목록을 index가 가지고 있다는 것을 알 수 있습니다.

글을 적다 보니 너무 깊게 설명한 것 같습니다ㅜㅜ. "아! index 파일은 파일에 대한 목록들을 기록하는구나", "Staging Area는 저렇게 되어있구나"라는 사실만 대략적으로 감을 잡으면 좋을 것 같아서 설명했습니다. 만약 index 파일의 내용이 잘 이해가 안 되신다면 그것은 제가 감만 잡을 수 있도록 간단히 설명했기 때문입니다. 혹시 더 이해를 하고 싶으시다면 이 글을 참고해주세요.

반응형

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Git과 GitHub를 사용하기 전에 알아야 할 개념들 :: Remote, Push, Pull, Clone

    Git과 GitHub를 사용하기 전에 알아야 할 개념들 :: Remote, Push, Pull, Clone

    2020.07.18
  • 변경한 파일을 저장해보자 :: git commit

    변경한 파일을 저장해보자 :: git commit

    2020.07.13
  • Commit하기 위해 필요한 Git 설정하기 :: git config (system vs global vs local)

    Commit하기 위해 필요한 Git 설정하기 :: git config (system vs global vs local)

    2020.07.06
  • 저장소 안의 파일들의 상태를 확인해보자 :: git status

    저장소 안의 파일들의 상태를 확인해보자 :: git status

    2020.07.06
다른 글 더 둘러보기

정보

Coding Groot 블로그의 첫 페이지로 이동

Coding Groot

  • Coding Groot의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록
  • 소개
  • 블로그 저작권

카테고리

  • 분류 전체보기 (183) N
    • Git (23)
      • Git Tutorial (9)
      • Git Note (7)
      • Git Lecture (7)
    • Programming Language (1)
      • C (2)
      • C Sharp (5)
      • Java (4)
      • JavaScript (7)
      • Julia (5)
      • Python (4)
    • Programming (8)
      • Algorithm (2)
      • Compiler (5)
      • Data Structure (0)
      • Web (12)
      • NestJS (2)
    • DevOps, Infra (36)
      • Apple (6)
      • Cloud (15)
      • Database (1)
      • Network (4)
      • Linux (8)
    • Game Programming (11)
      • Unity Tutorial (5)
      • Unity Note (6)
    • Hardware Design (1)
      • Digital Circuit (1)
    • Note (49)
      • Coffee (2)
      • Retrospect (15)
      • Reading List (14)
    • Mathematics (1)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • aws
  • 서평
  • Github
  • tutorial
  • javascript
  • git
  • 한빛미디어
  • 회고
  • 전체 보기…

정보

Coding Groot의 Coding Groot

Coding Groot

Coding Groot

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기

나의 외부 링크

  • GitHub
  • SlideShare
  • 유니티 2020 수업
  • TIL Blog
  • 모도코

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. Copyright © Coding Groot.

티스토리툴바