[Git] 스테이징 Staging

Bam·2022년 3월 3일
0

Git

목록 보기
5/33
post-thumbnail

스테이징

스테이징은 작업 공간에서 작업을 하고 그 파일을 버전 관리를 위해 스테이지로 옮기는 것을 말합니다. 이 작업은 파일 관리의 첫 단계라고도 할 수 있습니다.

먼저 vim으로 git Bash상에서 텍스트 파일을 만듭니다. 이때 파일의 내용은 저를 그대로 따라오셔도 좋고 본인이 원하는 내용으로 해도 좋습니다.

vim 파일명.확장자: vim으로 파일을 생성합니다. 자동적으로 vim 화면으로 넘어갑니다.

저는 test01이라는 내용을 적은 test01.txt파일을 하나 만들었습니다. 참고로 cat명령을 이용하면 파일의 내용을 볼 수 있습니다.

cat 파일명 또는 경로: 터미널상에서 파일의 내용을 볼 수 있습니다.

이렇게 파일을 생성하고나면 이제 파일을 스테이징할 차례입니다. 그 전에 git status로 현재 깃의 상태를 보겠습니다.방금 전에 만든 test01.txt파일이 추적되지 않은 파일이라고 나옵니다. 이 추적되지 않은 파일(Untracked files)은 버전 관리가 한 번도 되지 않은 파일을 의미(commit 된 적이 없는 파일)합니다.

이제 스테이징을 해보겠습니다. 스테이징은 git add 명령어로 수행합니다.

git add 파일명

이것이 정상적으로 스테이징된 결과입니다. 윈도우 시스템 기준이고요, 경고메세지가 하나있는데 스테이징은 정상적으로 수행되었습니다.

warning이 발생한 이유

git에서 사용되는 명령어는 리눅스 기반 명령어입니다. 그러나 우리가 지금 사용하고있는 git Bash는 윈도우 운영체제에 기반을 두고 있습니다. 이때 발생하는 줄바꿈(엔터, 개행)문자가 다르기 때문에 위와 같은 경고메세지가 나오게 됩니다. 경고메세지의 내용은 자동적으로 텍스트 파일 내부의 CRLF(윈도우 개행문자)가 LF(리눅스/혹은 맥 개행문자)로 변경되어 깃에 스테이징되고 커밋될 거라고 알려주는 메세지입니다. 오류가 아니므로 뜻만 이해하고 넘어가시면 됩니다!



다시 한 번 git status로 파일의 상태를 확인해볼까요?
Untracked에서 Changes to be committed 상태가 되었습니다. 대충 커밋할 변경점이라는 의미를 갖고있고 이 상태가 스테이징이 되었다는 상태를 나타냅니다.

만약 git add명령 이후에 여러파일명 혹은 디렉토리명을 적는다면, 여러개의 파일, 폴더 안의 파일들을 한 번에 스테이징 할 수 있습니다.

git add 파일명1 파일명2 파일명3 파일명4
git add 디렉토리명

스테이징 취소

어떤 수정사항이 맘에 들지 않아서 커밋하기 전에 스테이징을 취소해버리고 싶을 수도 있죠? 이번에는 스테이징을 취소하는 방법에 대해서 알아보겠습니다. 사실 눈치가 빠르신분들은 알아내셨을 수도 있습니다. 바로 위에서 'use~ to unstaging'이라는 글귀가 있었습니다. Git Bash는 웬만하면 모든 조작법을 알려주기때문에 이처럼 사용하기 편하기도 합니다.

아무튼, 스테이징을 취소하는 방법에는 두 가지가 있습니다.

git reset HEAD 파일명    //파일명 미지정시에는 스테이지 내부의 모든 파일의 스테이징을 취소
git rm --cached 파일명

다시 스테이징 이전 상태로 돌아갔음을 볼 수 있습니다. 이런식으로 커밋때도 나오겠지만 취소하는 방법 등을 터미널 상에서 친절히 알려주는 경우도 있습니다.

git reset HEAD와 git rm --cached의 차이점

저도 처음 배울땐 git reset HEAD방식으로 배웠는데 포스팅 하면서 보니까 git rm --cached방식을 터미널에서 안내해주더라고요. 그래서 두 가지가 뭔 차이점인지도 소개해보려고 합니다.

git reset HEAD는 파일을 스테이지에서 제거하지만 파일의 변경사항 추적은 계속해서 이루어집니다.

반면, git rm --cahed는 파일을 스테이지에서 제거하면서 변경사항 추적도 중지합니다.라는 차이점을 가지고 있다고 합니다.

자세한 원리는 git add명령을 하면 .git폴더에 파일이 등록되는데, 이 폴더에 등록된 순간부터 추적이 시작됩니다. 그래서 reset HEAD는 .git에 파일을 냅둔채로 스테이지에서 삭제시켜 변경사항 추적은 계속 이루어지고, rm --cahed는 .git폴더에서 파일을 삭제시키면서 스테이지에서도 삭제시키므로 추적도 멈추고 스테이지에서도 내려오는 것이 었습니다.


참조

0개의 댓글