TIL# Git 쉽게 배우는 깃 명령어&이론 1탄(clean,add,status)

3
post-thumbnail

TIL# Git 쉽게설명하는 깃 명령어 1탄(clean,add,status)

이번시간에는 Git이 추적하지 않은 untracked file을 어떻게 관리해야 되는지를 중심으로 알아보자 .

Git으로 프로젝트를 관리하다 보면 untracked 파일이 쌓이는 경우가 종종 있다. 브런치를 따로 파서 기능별로 개발을 하면서, a 브랜치에서 쓰는 파일을 b 브랜치에서 쓰고 싶지 않은 경우도 있고 각 브랜치마다 파일을 독립적으로 보관하고 싶을 때가 있다.

혹은 remote 저장소에 넣을 파일은 아니지만, 테스트용으로 로컬에서 임시로 만들었다거나 이미지 등의 파일을 추가하려고 프로젝트 밑에 추가했거나 하는 경우가 생길 것이다. 이런 경우에 어떻게 깃을 활용할지에 대해 알아보자.

Git 저장소에 넣은 파일들을 어떻게 관리될까?

Git은 자기 폴더에 있는 파일을 크게 보면 Tracked, Untracked 이 두 가지의 상태로 분류해서 관리한다.

  1. Tracked: Git이 관리해주는 상태( 넌 관리 대상이야!)
  2. Untracked: Git이 관리하지 않는 상태(넌 관리대상 아님!)

Tracked File

Tracked File은 깃이 추적하고 관리하는 상태를 말하며, Git은 관리하는 파일(tracked file)을 다시 한번 3개의 상태로 세분화해서 관리를 해준다.

그 4가지의 상태는 지난 시간의 깃의 stage상태를 참조하자. Git의 workflow 이해

지난 시간에 우리는 Git은 파일을 크게는 Commited, Modified, Staged 세가지 상태로 관리한다고 배웠다.

git의 플로우로 보면 untracekd, unmodified, modified와 staged, commited로 나눠 볼 수 있다.

깃에서 Tracked file은 3가지 상태로 나누어진다.

Tracked File의 세 상태

  1. Unmodified: 파일이 수정되지 않은 상태 (= 파일이 최근에 저장한 상태 그대로임)
  2. Modified: 파일이 수정된 상태 (= 파일이 최근에 저장한 파일과 달라졌다고 알려줌)
  3. Staged: 파일을 저장할 예정인 상태 (= 이 파일을 저장할 것이라는 뜻이다.)

이러한 세분화된 상태들을 보고 우리는 파일을 상태를 알 수 있다.

파일의 상태가

  • Unmodified/Modifed/Stage일 경우: 이 파일이 Git에 의해 관리가 되고 있다.
  • Modified일 경우: 이 파일은 변경되었다. 언어 그대로 수정된 점에 대해 깃이 변경사항이 있다고 기록을 해주는 것이다.
  • Unmodified일 경우: 이 파일은 저번에 저장한 파일과 비교해보니 그대로네? 라고 알려주는 것이다.

Untracked File

Untracked File은 앞서 말했듯이 git 저장소안에 파일은 있지만( 즉 현재는 working directory에서 작업을 하고 있는 상태이고) 이 파일이 Git 저장소에는 있지만 Git에 의해서 관리되고 있지 않은 파일입니다 라고 친절하게 깃이 우리게에 알려주는 상태 메세지 같은 것이라 할 수 있다.

Untrackied file 특성

  • Untracked일 경우: 이 파일은 Git에 의해 관리가 안되고 있다. (= 깃으로 관리하기 위해서는 추적파일로 추가해야한다. 버전관리를 안하므로 쓸모 없는 파일이거나 후의 버전관리로 등록할 예비 파일 것이라고 추적할 수 있다.)
  • Unmodified/Modifed/Stage이 세 가지 외의 상태는 모두 Untracked입니다.
  • Untracked File은 삭제되든 변형이 일어나든 Git이 추적하고 있지 않기 때문에 손상되었을 때 Git 명령어 등으로 복구가 불가하다.

Tracked vs untracked

즉, Tracked는 한 번이라도 커밋을 한 파일의 수정 여부를 계속 추적하는 상태라고 할 수 있고, untracked는 한 번도 깃에서 버전 관리를 하지 않았기 때문에 수정사항 내역을 추적하지 않는 상태라고 할 수 있다.

예제로 배우는 깃 명령어

먼저 우리가 개인이 아닌 협업을 하는 프로젝트를 하는 과정이라고 생각해보고 진행해보자.

처음 우리는 저장소를 git clone을 통해 초기 셋팅을 다같이 받을 것이다. 처음 clone하면 모든 파일은 tracked이면서 unmodified 상태가 된다. 파일은 클론받고 브랜치를 생성한다. 처음 git branch <만들 브랜치이름>

그 브랜치로 이동(git checkout 만든 브랜치이름)하면, 파일은 아무런 수정 변동사항이 없었기 때문에 unmodified 상태이다. 그 이후 우리가 어떤 파일을 수정하게 되면, git은 그 파일을 modified상태로 인식한다.

파일 상태 확인하기(git status)

git stauts의 명령어를 통해 상태를 확인 가능하다.

최초 클론 후나 마지막 커밋이후 전혀 건든 내역이 없다면, nothing to commit, working tree is clean 이런 메세지가 나오고 untracekd / tracked 등 아무런 파일 상태가 나타나지 않을 것이다.

파일을 을 새로 만들고 git status시에는 untracked fileds에 포함될 것이다.

파일을 새로 추적하기(git add): 파일을 stage상태로 만들어줌

git add의 명령어를 통해 깃에게 버전관리를 시작해! 라고 알려주고 파일을 추적시킬 수 있다.

이 명령은 파일 or 디렉토리를 받는다. 그래서 디렉토리를 받는다면 그 하위에 모든 파일들까지 관리명단에 추가시킨다.

git add . <-- 모든 파일 add

git add -a <--위와 동일함(-all option임)

파일을 추가 하고 git add후 git status를 해보면, untracked -> tracked 로 변경되었고

changed to be comitted 에 파일이 들어가 있어서 staged(커밋 직전 단계) 상태인 것을 알 수 있다.

혹시 git add후 커밋을 안하고 그 파일을 다시 수정한다면, 그 파일은 staged에서 unstaged로 간것을 확인 할 수 있다?

왜? 라는 의문점이 생길텐데 , 이는 git add후 커밋을 안했기 때문에 일어나는 것이고 git add 명령을 실행한 후 또 파일을 수정했다면 다시 git add 명령을 실행해 최신 버전을 Staged 상태로 만들어야 한다

변경사항 업로드하기(git commit)

파일 수정한 것을 staging area로 옮겨서 staged되었다.

git commit의 명령어를 통해 버전관리를 업로드 해줄 수 있다.

기억해야 할점은 Unstaged 상태인 파일은 커밋이 안되니까 그점 유의해!!

즉 , Git은 Staging Area에 속한 스냅샷을 커밋한다.

git add를 생략하고 바로 커밋하는 방법(staging area를 생략하고 커밋)은 전 시리즈에 나온대로 -a옵션을 사용해

git commit -a -m "message"을 통해 커밋한다.

Untracked file 삭제하기

맨 서두에 얘기한 내용처럼 저장소에 넣을 건 아니고 테스트를 위해 파일을 만들었다던가 이미지 추가를 위해 잠시 만들었지만, 깃 저장소에 넣고 반영하고 싶지 않다면?? Untracked file을 한번에 지우고 싶다면?

  1. git status를 통해 현재 상태를 확인
  2. git clean -f 명령어를 사용하면 untracked 파일을 모두 지울 수 있다.
  3. git clean -fd -d 옵션을 추가해서 명령어를 사용하면 그 파일 및 디렉토리까지 전부 지울 수 있다.
  4. 추적 파일을 지울땐 모든 파일을 지우므로 지우고 싶지 않은 파일이 있다면 git clean --fd --dry-run 을 통해 제거하기전 어떤 파일을 제거할 것인지 확인이 가능하다. 그러므로 제거하지 않을 파일들은 미리 stage로 처리 하면 실수로 제거될 일은 없을 것이다.

파일 변경사항보기(Git diff): Staged와 unstaged등 상태 변경 내용

단순한 파일 변경 사실뿐 아니라 어떤 내용까지 변경됬는지 알고 싶을 때 git diff의 명령어를 통해 사용한다.

git diff는 어떤 수정 사항들이 적용됬는지 보고자 할때 사용하는 명령어 이다.

Unstaged된 상태(add안한 상태야!)의 파일들만 보여주기 때문에 staged 된 수정 사항들은 git diff로 볼 수 없다.

Modified 된 파일들만 git diff로 볼 수 있다.

  1. Staged 상태인 파일은 git diff --cachedgit diff --staged 옵션을 통해 확인이 가능하다.

  2. git diff origin/master origin/my_branch 이 명령어는 로컬 브랜치간 비교를 확인하는 명령어로

    master 브랜치와 my_branch의 차이를 보여준다.

  3. git diff <commit해시아이디> <commit해시아이디> : 커밋끼리 비교 하는 명령어

  4. git diff <비교대상 1>..<비교대상 2> : 비교대상1과 비교대상2의 차이점 비교 .. 이 들어감

미세 팁 : git diff로 변경사항을 볼시 칼라로 한 눈에 알아보려면 diff-highlight사용

git 저장소에 가면 contrib이라는 폴더가 있는데 이 안에 diff-highlight라는 스크립트가 있다. 이 파일을 내려받아서 PATH에 추가하면 git diff | diff-highlight처럼 명령어를 사용할 수 있다.

git config --global pager.diff 'diff-highlight | less' 명령어로 설정에 영구적 추가하거나 혹은

~/.gitconfig파일에 다음과 같은 설정을 추가한다.

[pager]
	diff = diff=highlight | less

출처:

https://blog.outsider.ne.kr/1011

profile
문과생 개발자되다

0개의 댓글