git add -i (혹은 --interactive) 명령어는 이후 커밋에 포함될 사항들의 목록을 편집할 수 있는 대화형 인터페이스를 제공한다.
이 대화형 인터페이스를 이용하면 수정된 파일 전체를 stage 영역에 추가/제거하거나, git 관리대상이 아닌 (untracked) 파일을 관리대상으로 추가하거나 반대로 관리대상에 새롭게 추가된 파일을 제거할 수 있을 뿐만 아니라, 더 나아가 수정된 내역을 조각별로 선택하거나, 조각을 더 작은 단위로 나누거나, 혹은 아예 diff 자체를 편집하는 등의 방법으로 현재 변경사항 중 일부분만 커밋 대상에 포함시킬 수도 있다.
여러가지의 Git 용 GUI 커밋 툴들 (예: git gui) 이 이와 같은 기능을 제공한다; 이러한 GUI 툴은 이용하는 것이 커맨드라인 명령어를 직접 입력하는 것보다 훨씬 사용하기가 쉬울 것이다.
만약 여러분이 (1) 하나의 커밋으로 묶기에 적합하지 않아 여러개의 개별 커밋으로 나누어야 할 수정사항들을 구분되지 않은 채로 작업 디렉토리에 가지고 있거나 (2) 대화형(interactive) rebase를 진행하던 중 하나의 커밋이 너무 커 여러개의 작은 커밋으로 나누고자 한다면 이 명령어는 매우 유용할 것이다.
출력 화면 상단에는 현재 상태 목록을 stage 된 부분과 stage 되지 않은 열로 나누어 표시하고 있다:
index.js 파일은 4줄이 추가되고 4줄이 삭제된 상태이다. 해당 파일은 현재 stage 되어있지 않아, "staged" 열 부분이 "unchanged" 로 표시되어 있다.
만약 이 파일을 stage 시킨다면, "+4/-4" 부분은 "staged" 열로 이동할 것이고 "unstaged" 열의 내용은 "nothing" 으로 바뀔 것이다
package.json 파일은 한줄이 추가된 이후 해당 변경 내역이 stage 되었다. stage 된 이후에는 추가적으로 변경된 내역이 없는데, 이는 "unstaged" 열에 해당하는 내용이 "nothing" 으로 표시된 것은 확인하여 알 수 있다.
화면 하단에는 사용자가 수행할 수 있는 작업 목록이 표시되고 있다. 화면에 표시된 대로 숫자나 (1-8) 영문자를 (s, u, r, a, p, d, q, h) 입력하여 원하는 작업을 수행한다.
status 위에서 소개했던 예제 화면과 동일한 형식으로 현재 상태를 다시 한번 표시해준다.
update 이후 커밋에 반영될 stage 영역에 추가할 파일들을 선택할 수 있도록 목록을 표시한다.
revert stage 영역에 추가된 파일들 중 변경 내역 정보를 HEAD 의 상태로 되돌릴 (unstage 시킬) 파일들을 선택한다.
add untracked 현재까지 Git 에의해 관리되지 않았던 (untracked) 파일을 추가한다.
patch 추가적으로 분석할 파일을 선택해 파일 내 수정 내역을 조각 단위로 추가한다. (git add -p 에서 소개한 기능이다)
2.x 버전에서는, git add . 명령어는 현재 디렉토리와 모든 하부 디렉토리의 모든 파일들에 대한 변경 내역을 stage 할 것이다.
그러나, 1.x 버전에서는 새로 추가되었거나 수정된 파일들만 stage 할 뿐, 삭제된 파일들에 대해서는 stage 를 수행하지 않는다.
git add -A 명령어나, 혹은 동일한 명령어인 git add --all 를 사용하면, Git의 버전에 상관없이 모든 파일들의 수정 내역을 stage 할 수 있다.