안녕하세요. 이번시간에는 stage 상태와 tracked, untracked 상태에 대해서 간단하게 짚고 넘어가 보겠습니다.

 


 먼저 .gitignore에 .env가 들어가 있습니다.

 

 ls-files로 파일들을 조회해 보겠습니다. git ls-files를 입력하면, track 되는 파일들이 나오게 됩니다.

 

 -o 옵션을 붙이면, 다른 파일들이 나오게 됩니다. .env가 나왔네요. 이는 .env는 untracked 됨을 의미합니다.

 

 저는 이 상태에서 1.txt와 .env 파일에 무언가를 추가하였습니다. 다음에 git status를 보겠습니다.

 

 

 보니까, modified: 1.txt라고만 떠 있습니다. 즉, 깃으로부터 변경 사항이 추적되는 파일을 tracked file이라고 하고, 그렇지 않고 무시되는 파일을 untracked file이라고 할 수 있습니다. 제가 .env에 E=F라는 내용을 추가했지만, 변경 사항이 git status에 뜨지 않았습니다. 따라서, .env는 untracked file이 됩니다.

 

 그런데, 1.txt는 이미 변경 내용이 추적되고 있어요. tracked file인 셈입니다.

 


 여기까지 이해되셨다면 다음 부분으로 넘어갑시다.

 

 git add .를 입력해 보겠습니다. 이 명령은, 현재 제 작업 디렉토리에서 상태가 변한 파일이면서 추적되고 있는 파일들을 staging area에 추가합니다. git add .을 하기 전에는 1.txt가 변경은 되었습니다. 하지만, 1.txt를 커밋해야 한다라는 정보를 넘기지 않은 상태입니다. 즉, staging area에 넘긴다는 것은, 커밋을 위해, 1.txt가 변경되었다는 메타 정보를 넘겨주라는 의미입니다.

 

 이제, git add .을 하고 난 뒤에 상태를 보면, 1.txt의 변경 사항이 있으니 커밋해야 한다는 메타 정보가 올라왔음을 알 수 있습니다. 여기까지 정리. staging 상태라는 것은, 해당 변경 내역을 커밋해야 한다. 라는 정보가 올라간 상태인 것입니다.

 

 git status를 쳐 보면, changes to be committed: 라는 것이 올라와 있습니다. 커밋을 위한 변경 파일이 1.txt가 있다는 의미입니다.

 

 

 이제 다시 git restore --staged .를 입력해 보겠습니다. 그러면, Changes not staged for commit: 이라는 상태로 다시 변하게 됩니다. 이는 무엇을 의미할까요? 먼저 Changes not staged for commit: 부터 해석해 봅시다. 변경점은 있지만, 커밋을 위한 변경 사항 정보에는 업데이트 되지 않았다는 의미입니다.

 

 이전 상태는 어땠나요? 커밋을 위한 변경 사항으로 1.txt가 있었습니다. 그런데, 제 작업 디렉토리에만 변경 사항이 있는 상태로 바뀌어 버렸습니다. 이를 unstage 상태라고 합니다. staging area에 파일의 변경 사항이 있지 않고, 단지 제 작업 디렉토리에만 있는 상태를 의미합니다.