본문 바로가기
개발/Git, Github

[git] git status

by 77monkey 개발자 2023. 8. 24.
반응형

제가 git을 이용하면서 가장 많이 입력하는 명령어 중에 하나입니다. 마치 리눅스에서 ls를 입력하는 것과 같은 느낌이라고 할까요? 초보일 때는 git status에 대한 내용도 잘 이해를 못 해서 동기에게 물어봤던 기억이 있습니다. 오늘은 git status에 대해서 알아보도록 하겠습니다. 

 

git status 정의

git status는 현재 작업 중인 저장소의 상태를 보여주는 정보를 제공합니다.

 

git status 실습

아무것도 만들지 않은 상태에서 git status를 입력하면 다음과 같이 나옵니다. 

혹시나 해서 말씀드리면 평범한 디렉토리에서 git status를 하면 "fatal: not a git repository) ~"라고 나옵니다. test 하실 디렉터리를 하나 만드시고 거기에서 git init을 하시면 git repository가 됩니다. 

자세한 사항은 [git] git init 명령어를 참고해 주시길 바랍니다.

git status
git status

  • On branch master: branch 라는 것을 나중에 설명드릴 예정인데, 현재 branch가 master라는 것을 의미합니다. 
  • No commits yet: commit한 것이 아직 없다는 것입니다. 
  • nothing to commit: commit할 것이 아직 없다는 의미인데, 위와 좀 비슷하네요.

이 상태에서 파일을 하나 만들어 봅시다.

저는 77monkey.c 라는 파일을 만들어 보도록 하겠습니다. 만드는 방법은 다양한데 저는 touch cmd로 만들어 보려고 합니다. 

$ touch 77monkey.c

touch 77monkey.c; git status
touch 77monkey.c; git status

그림을 보시면 아시겠지만, 좀 전 상황에서 뭔가 좀 바뀌었습니다. 

  • Untracked files: git에서 tracking, 즉 관리하지 않겠다는 것을 의미합니다. 

Untracked files 밑에 git이 친절하게 알려줍니다. git add <file>을 사용하면 commit을 할 수 있다고 말입니다. 그럼 우리 한 번 git add 77monkey.c를 해볼까요? 

$ git add 77monkey.c

git add 77monkey.c; git status
git add 77monkey.c; git status

그림을 보시면 아시겠지만, 이번에도 좀 전 상황이랑 다릅니다. new file 77monkey.c 라고 나옵니다.

  • changes to bo committed: stage area에 있고 commit으로 만들어진 코드 변경을 의미합니다. 

여기에서 git commit을 하게 되면 commit으로 만들어지고, git status에서는 1번째 그림으로 가게 됩니다.(nothing to commit 그림)

Change to be committed 아래에 또 git이 친절하게 알려줍니다. git rm --cached <file>을 쓰면 unstage로 가게 된다고 말입니다. 그래서 한 번 써봅니다.

git rm --cached 77monkey.c; git status
git rm --cached 77monkey.c; git status

결과를 보니 git add를 하기 전 상태로 가게 되었습니다. 다시 commit을 하려면 git add를 하라고 나오네요.

git commit을 통해서 commit을 하나 만들어 조금 다른 상황을 만들어 보도록 하겠습니다. 

git add 77monkey cmd를 입력하고, git commit -m "77monkey test"라고 입력하면 commit이 하나 만들어집니다. git log을 통해서 만들어진 것을 확인하실 수 있습니다. 

혹시나 안들어지신 분이 있다면, 아래와 같이 입력하시고 git commit을 다시 입력해 보시길 바랍니다.

$ git config --global user.email "your_email@example.com"
$ git config --global user.name "Your Name"

자, 이제 다시 77monkey.c 파일을 수정해 보도록 하겠습니다. 

아래 그림에서 보시다시피 echo 77monkey를 하면 77monkey가 출력되고 해당 내용을 77monkey.c에 저장합니다. 그리고 cat을 통해서 변경한 내용을 확인합니다. 그리고 git status를 입력합니다.

echo 77monkey &gt; 77monkey.c; git status
echo 77monkey > 77monkey.c; git status

git status를 입력하니 이전과는 좀 다른 모습이 나오지 않았나요? modified 77monkey.c라고 나옵니다.

  • Changes not staged for commit: git에서 관리하고 있는 파일 중에 commit과 다른 변경 코드가 발생한 경우입니다. 

여기에서는 git add <file>을 통해서 stage area로 보내거나, git restore <file>을 통해서 변경 코드를 버리거나 할 수 있습니다.

자 이제 git add를 통해서 마지막 상황을 봅시다. 

git add 77monkey.c; git status
git add 77monkey.c; git status

git add를 하게 되면 Changes to be committed로 가게 되고, git restore --staged <file>을 통해서 해당 실습 바로 이전처럼 Changes not staged for commit으로 갈 수 있습니다. 여기에서 git commit을 하게 되면 commit이 생성됩니다. 그럼 현재는 어느 작업 영역일까요? 네, 맞습니다. stage area입니다. 

 

git status 정리

오늘 이 사진을 이해하면 다 이해하는 것입니다. 제가 위 실습에서 test.c 파일에 test라는 글자를 넣었습니다. 그리고 trash.c 파일도 하나 만들었습니다.

git status 정리
git status 정리

test.c 파일은 git commit cmd를 입력하면, commit으로 만들어집니다. 현재 stage area에 있습니다. git restore --staged <file> cmd를 입력하면 Changes not staged for commit 쪽으로 이동하게 됩니다. unstage 즉, stage가 아닌 상태로 가게 된다는 의미입니다. 

77monkey.c 파일은 git이 관리하고 있는 파일인데, 아직 git add를 하지 않은 상태입니다. 여기에서는 선택지가 2개가 됩니다. git add를 통해서 stage area로 갈 수도 있고, git restore를 통해서 변경되기 전 코드로 돌아갈 수도 있습니다. 

trash.c는 git에서 관리하는 파일이 아니라는 의미입니다.

 

마무리

따라오시느라 고생 많으셨습니다. git에 대해서 익힌 다음에 git status를 익히면 좀 무리가 있지만 그래도 큰 그림을 파악하는데 도움이 됩니다. git add, git commit 등 낯선 command로 힘드셨을 텐데 앞으로 차근차근 다루도록 하겠습니다. 

그리고 git을 다루시면 정말 정말 큰 도움이 되는 게 바로 git의 메시지입니다. 메시지를 천천히 읽는 습관을 가지면 거의 모든 문제가 풀립니다. 잊지 마세요!

반응형