Git | Git 기본 | git add


git add 명령

git add 는 작업 디렉토리의 변경을 스테이지(stage) 영역에 추가하는 명령이다. 이 명령은 각각의 파일의 업데이트 내용을 다음 커밋(commit)의 대상으로 추가하는 것을 Git에 지시한다. 그러나 git add 명령만으로는 실제로 로컬 저장소에 아무런 영향을 주지 않고 git commit 명령을 실행하기 전까지는 변경이 실제로 기록되는 것은 아니다.

이러한 명령과 관련하여 작업 디렉토리 및 스테이지(stage) 영역의 상태를 확인하기 위해 git status 명령이 사용된다.

사용법

git add <file>

<file> 에 가해진 모든 변경을 스테이지징(스테이지징 영역에 추가)하고 다음 커밋 대상으로 한다.

git add <directory>

<directory> 의 모든 변경을 스테이지징(스테이지징 영역에 추가)하고 다음 커밋 대상으로 한다.

git add -p

상호작용(interactive) 스테이지(stage) 세션을 시작합니다. 상호작용 스테이지 세션에서는 파일의 일부를 선택하여 스테이지하고 다음 커밋의 대상이 될 수 있다. 이 명령을 실행하면 변경 사항이 표시되고 그에 대한 다음의 명령 입력을 요구한다. y 를 입력하면 그 부분이 스테이지되고 n 을 입력하면 그 부분은 무시되고 s 를 입력하면 그 부분은 더 작은 조각으로 분할되어 e 를 입력하면 그 부분을 수동으로 편집 할 수 있게 , q 를 입력하면 대화 형 세션을 종료한한다.

보충 설명

git add 와 git commit 은 Git의 기본적인 워크 플로우를 구성한다. 모든 Git 사용자는 소속 팀의 협업 모델이 어떻든 이러한 두 명령을 이해해 두지 않으면 안된다. 이 프로젝트의 버전 저장소의 이력을 기록하는 방법이다.

프로젝트의 진행과 함께 편집 / 스테이지 / 커밋의 기본 패턴이 반복된다.
사용자는 먼저 작업 디렉토리에있는 파일을 편집한다.
현재 작업 디렉토리의 상태를 저장하고자 할 때 git add 명령을 사용하여 변경을 스테이지 한다.
스테이지 된 스냅 샷에 문제가 없으면 git commit 명령을 사용하여 그것을 로컬 저장소에 커밋한다.

Git 튜토리얼 : git add Snapshot

git add 명령 및 파일 저장소에 추가를 실행하는 svn add 명령을 혼동해서는 안된다. git add 는 변경에 대해 더 추상적인 수준에서 작동하는 명령이다. 즉, svn add 는 각각의 파일마다 한 번만 호출 명령하지만 git add 는 파일을 수정할 때마다 호출해야 한다. 이것은 장황하게 들릴 수도 있지만, 이 흐름에 따라 프로젝트를 잘 관리 된 상태로 유지하는 것이 용이하다.

스테이징 영역

스테이징 영역은 Git이 가진 독특한 기능 중 하나이며, SVN (또는 Mercurial)에 익숙한 사람들에게는 이해하기 어려운 개념지도 모른다. 이것은 작업 디렉토리와 로컬 저장소 사이의 버퍼라고 생각하면 좋을 것이다.

스테이지를 사용하여 마지막으로 커밋하고 나서 이후의 모든 변경 사항을 한 번에 커밋하는 것이 아니라 관련성이 강한 변경만을 구분하여 초점이 명확한 스냅 샷을 생성하고 실제 커밋을 수행 할 수 있다. 즉, 관련성은 신경 쓰지 않고 원하는대로 파일을 수정 한 후 관련성이 강한 변경을 정리해 스테이지 외에도 조금씩 커밋을 수행함으로써 논리적으로 잘 정리 된 커밋 할 수있는 것이다. 다른 버전 관리 시스템에서도 마찬가지이지만, 프로젝트의 다른 부분에 미치는 영향을 최소화하면서 버그의 원인 추적 및 취소를 쉽게 할 수 있도록 한 번의 커밋은 작은 규모로하는 것이 중요하다.

사용 예

새 프로젝트를 시작할 때 git add 명령은 svn import 명령과 동일한 기능을 한다. 현재 디렉토리의 커밋을 처음 할 경우는 다음의 두 명령을 사용한다 :

git add .
git commit

프로젝트가 순조롭게 진행 시작한 후에는 git add 경로를 입력하여 새 파일을 추가 할 수 있다 :

git add hello.py
git commit

위의 두 명령은 기존 파일에 변경 내용을 기록 할 때 사용한다. 즉, Git은 새 파일을 생성한데 따른 변경 이미 저장소에 저장되어 있는 파일의 내용의 변경을 구분하지 않는다.