Original article: How to Undo a Git Add

커밋하기 전에 git add를 취소하려면 git reset <파일명> 또는 git reset 명령어를 실행하면 됩니다(명령어에 파일명을 전달하지 않으면 모든 파일을 unstaged 상태로 변경합니다. Unstaged란 파일이 Staging area에 더 이상 들어있지 않다는 것을 의미합니다. -옮긴이).

이전 버전에서는 git reset HEAD <파일>, git reset HEAD 명령어가 사용되었지만, Git 1.8.2 버전부터 각각 git reset <파일명>, git reset으로 변경되었습니다.

자주 사용되는 다른 Git 작업 명령어에 대해 자세히 알아보고 싶다면 다음 기사를 확인해보세요.

Git에 대해 더 자세히 알아볼까요?

Git 프로젝트의 세 가지 영역

Git 프로젝트에는 총 세 가지 영역이 있습니다.

  1. Git 디렉터리(Git Directory)
  2. 워킹 트리(Working Tree/Working Directory)
  3. 스테이징 영역 (Staging area)

(세 번째 영역인 스테이징 영역은 Staging area라는 표현이 보편적으로 사용되므로 이 부분 외의 본문에서는 별도로 음차 표기하지 않겠습니다. -옮긴이)

Git 디렉터리(작업하는-프로젝트-경로/.git/에 있음)는 Git이 프로젝트를 정확하게 기록하고 관리하는 데 필요한 모든 것을 저장하는 곳입니다. 프로젝트의 메타데이터와 파일의 압축 버전을 포함한 객체 데이터베이스가 저장되어 있습니다.

워킹 트리는 사용자가 작업을 진행하며 여러 변경 사항을 발생시키는 곳입니다. 워킹 트리는 Git 디렉터리에 있는 객체 데이터베이스의 파일을 사용자의 로컬 컴퓨터로 가져옵니다(이를 곧 pull이라고 표현합니다. -옮긴이).

Staging area는 다음 커밋에 들어갈 내용에 대한 정보를 저장하는 파일입니다("인덱스(index)", "스테이지(stage)" 또는 "캐시(cache)"라고도 합니다). 커밋은 사용자가 Git에게 Staging area에 있는 파일들을 저장하라는 의미를 전하는 지시입니다. 이때 Git은 파일의 스냅샷을 만들고, 해당 스냅샷을 Git 디렉터리에 영구 저장합니다.

Git 프로젝트가 세 가지 영역으로 나뉘어 관리되는 것처럼, 프로젝트에 있는 파일 역시 committed, modified, 또는 staged 세 가지의 상태로 관리됩니다. 각각의 상태를 Git 프로젝트의 세 가지 영역과 연관지어 생각해보면 이해하기 쉽습니다.

  1. 워킹 트리에 있는 파일 중 수정한 파일은 modified 상태가 됩니다.
  2. 파일을 Staging area로 옮기면 파일은 곧 커밋될 것이라는 의미를 가진 staged 상태가 됩니다.
  3. 마지막으로 커밋된 파일은 committed 상태가 됩니다.

Git 설치하기

Git 환경 설정하기

Git에는 Git의 사용 환경을 설정할 수 있는 git config라는 도구가 있습니다. 특정 구성 변수(configuration variables)를 설정하면서 Git 터미널의 테마 혹은 기능을 변경할 수 있습니다. 변경 사항을 저장하려면 로컬 컴퓨터의 커맨드라인 인터페이스(CLI, command line interface)에서 git config 명령어를 실행해야 합니다(Mac에선 Terminal, Windows에선 Command Prompt 또는 Powershell).

구성 변수는 세 가지 레벨 중 하나에 저장됩니다.

  1. 시스템(System): /etc/gitconfig에 위치합니다. 로컬 시스템의 모든 사용자에게 기본 설정을 적용합니다. 이 파일을 변경하려면 git config 명령어와 함께 --system 옵션을 사용합니다.
  2. 사용자(User): ~/.gitconfig, ~/.config/git/confi에 위치합니다. 특정 사용자(즉, 현재 사용자)에게만 적용되는 설정을 저장합니다. 이 파일을 변경하려면 git config 명령어를 --global 옵션과 같이 사용합니다.
  3. 프로젝트(Project): 작업하는-프로젝트-이름/.git/config에 위치합니다. 특정 저장소에만 설정을 적용합니다. 이 파일을 변경하려면 git config 명령어를 실행합니다.

세 파일 간에 충돌하는 설정이 있는 경우 역순으로 높은 우선순위를 갖습니다. 즉, 프로젝트 설정이 사용자 설정보다 우선하고, 사용자 설정이 시스템 설정보다 우선합니다.

참고로 Windows 사용자의 경우 Git은 $HOME 디렉터리(C:\Users\$USER)에서 .gitconfig 사용자 설정 파일을 찾습니다. 일반적으로 /etc/gitconfig 시스템 설정 파일 또한 같은 경로에서 찾는데, 이 경로는 MSys 루트의 상대경로입니다. MSys 루트는 Git을 Windows에 설치할 때 결정됩니다. 'Git for Windows'(윈도우 Git) 2.0 이후 버전을 사용 중이라면 Windows XP 사용자는 C:\Documents and Settings\All Users\Application Data\Git\config 경로에서, Windows Vista 이후 버전 사용자는 C:\ProgramData\Git\config 경로에서 /etc/gitconfig 시스템 설정 파일을 찾을 수 있습니다. 이 시스템 설정 파일의 경로를 변경하려면 관리자 권한으로 git config -f <파일> 명령어를 실행해야 합니다.

이름, 이메일 설정하기

Git은 커밋할 때마다 사용자 이름과 이메일 주소 정보를 저장합니다. 다음 명령어를 통해 사용자 설정 파일에 이를 미리 지정해둘 수 있습니다.

git config --global user.name "영문 이름"
git config --global user.email "myemail@example.com"

편집기(text editor) 설정하기

Git은 기본적으로 시스템의 기본 편집기를 사용하지만, 이 또한 변경할 수 있습니다. Atom 에디터를 대신 사용하려면 다음과 같은 명령어를 실행합니다(--wait 옵션은 설정된 편집기 작업이 끝날 때까지 셸(shell)을 대기시키는 옵션입니다).

git config --global core.editor "atom --wait"

Git 출력물에 색상 설정하기

다음 명령어를 사용하면 셸 출력물에 색을 입힐 수 있습니다.

git config --global color.ui true

git config --list 명령어를 실행하면 지정되어 있는 모든 환경설정을 확인할 수 있습니다.

Git 프로젝트 저장소 생성(초기화)하기

Git로 버전 관리를 시작하려면 Git 설치와 환경설정을 마친 후 프로젝트에 Git 저장소를 생성(초기화)해야 합니다. 먼저 커맨드 라인에서 cd를 사용해 프로젝트의 루트 경로(root directory)로 이동합니다. 그 다음 git init 명령어를 실행하면 Git이 프로젝트를 관리하기 위해 필요한 파일과 객체가 담긴 .git 디렉터리 폴더가 설치됩니다.

.git 디렉터리 폴더가 프로젝트 루트 경로에 설치되어야 한다는 점을 명심하세요. Git은 해당 프로젝트의 하위 폴더에 대한 버전은 관리할 수 있지만, 상위 디렉터리의 파일은 추적하지 않습니다.

Git 도움말 보기

Git 명령어 작동법이 기억나지 않는다면 아래의 명령어 중 한 가지를 사용하여 커맨드 라인에서 도움말을 볼 수 있습니다.

git help COMMAND
git COMMAND --help
man git-COMMAND

위의 명령어를 실행하면 Git 설명서가 셸 창에 나타납니다. 상하 화살표 키로 스크롤 하거나 다음 단축키를 사용하여 설명서 내용을 살펴볼 수 있습니다.

  • f, 스페이스 바: 페이지 앞으로 이동
  • b: 페이지 뒤로 이동
  • q: 설명서 창 나가기