본문 바로가기
Git

Git 기초 명령어(2)

by oncerun 2021. 2. 10.
반응형

 

Staged와 UnStaged 상태의 변경 내용을 확인하면서 시작한다.

 

단순히 파일이 변경됐다는 사실이 아니라 어떤 내용이 변경됐는지 살펴보려면 git status 명령이 아닌 git diff명령을 사용해야 한다. 

이 명령은 워킹 디렉터리에 있는 것과  현재 버전 = Staging Area에 있는 것을 비교한다. 그래서 수정하고 아직 stage하지 않은 것과의 차이를 볼 수 있는 것이다.

만약에 커밋하려고 Staging Area에 넣은 파일 부분의 변경 부분을 보고 싶다면 --staged옵션을 사용한다. 커밋된 것과 Staging Area에 있는 것을 비교한다.

 

git diff 명령은 마지막으로 커밋한 후에 수정한 것들을 전부 보여주지 않고 Unstaged 상태인 것들만 보여준다. 

이 말은 즉 Staging Area에 넣었다면 아무것도 출력하지 않는다는 것이다. 

 

README파일을 Stage 한 후에 다시 수정해도 git diff를 사용할 수 있는데 이때는 staged 된 상태와 Unstaged 된 상태를 비교해 출력해 준다.

 

 

변경사항을 커밋하자.

 

수정한 것을 커밋하기 위해 git add를 통해 Staging Area에 파일을 정리했다. Unstaged 상태의 파일은 커밋되지 않는다는 것 기억하자. 수정을 했다고 해도 add를 하지 않으면 Modified상태로 남아 있는 것뿐이다. 따라서 커밋 전 git status를 통해 확인할 수 있다.

 

 

자주 쓰일 수도 있는데 Staging Area를 생략하는 방법이다.

Staging Area는 커밋할 파일을 정리한다는 점에서 안정장치가 될 수 있지만 필요하지 않을 때도 있다. 

이때 git add -a옵션을 추가하면 추적 상태의 파일을 자동으로 Staging Area에 넣는다. 그래서 git add로 추가하지 않아도 된다. 

아직 staging Area에 들어가지 않은 파일이 보인다. git add로 추가하지 말고 바로 커밋해보자.

git commit -a -m "-a options"

다만 이 옵션을 사용할 때는 신중해야 한다. 추가하지 말아야 할 변경사항도 추가될 수 있다.

 

다음은 파일을 삭제할 것이다.

 

git rm 명령을 통해 추적 상태의 파일을 삭제한 후에 커밋해야 한다. 이 명령은 실제 디렉터리에 있는 파일도 삭제한다.

여기서 git rm을 통해 파일을 삭제하도록 명령했다면 그 행위는 바로 Staging Area에 올라간다. commit만 하면 된다.

커밋하면 파일이 삭제되고 git은 더 이상 해당 파일을 추적하지 않는다. 

또한 git이 추적하지 않게 할 수 있는데 이 경우는. gitignore파일에 실수로 넣지 못했거나, 대용량 로그파일 같은 것을 실수로 추가했을 경우 사용한다.

Staging Area에서만 제거하고 워킹 디렉터리에 있는 해당 파일은 삭제되지 않는다.

 

git rm --cached fileName

 

여러 개 파일과 디렉터리를 삭제하는 방법은 파일명 확장 기능을 이용하면 된다.

ex git rm log/\*. log   log디렉터리에 존재하는. log로 끝나는 모든 파일을 Staging Area에서 제거한다.

 

파일 이름을 변경하는 명령어

 

단축 명령어인 git mv file_from file_to이다. 다른 도구를 사용했을 경우 꼭 rm으로 제거하고 다시 add 해야 한다. vm은 이걸 합친 명령어다.

 

 

커밋 기록 조회하기

 

git 공식홈페이지에서 예제를 clone 해서 기록을 조회해 본다.

가장 최근 커밋 된 순서로 보인다. 그다음 체크섬, 저자 이름, 이메일, 날자, 커밋 메시지를 볼 수 있다.

자주 사용되는 옵션을 나열한다.

-p경우  diff결과를 보여준다.   

-2는 최근 커밋2개만 보여준다.

--stat옵션은 어떤 파일이 수정됐고 얼마나 많은 파일이 변경됐는지 , 얼마나 많은 라인이 추가됐는지 보여준다.

--pretty 옵션은 이쁘게 보여준다. 여러 arg가 존재한다. 이중 format 옵션인데 결과를 다른 프로그램으로 파싱 하고자 할 때 유용하다.

 

 해당 옵션들은 공식홈페이지를 찾아보자.

 

 

되돌리기

 

되돌리는 방법을 알아 본다. 되돌리면 복구할 수 없다. git은 실수는 복구가 되지만 의지를 가지고 Undo 한 것은 복구할 수 없다.

만약 완전히 종료한 커밋에 어떤 파일을 빼먹었거나 커밋 메시지를 잘못 적을 때사용하는 명령어가 있다.

git commit --amend 

만약 커밋한 후 수정한 것이 없다면 커밋 메시지만 변경된다.  이것은 이전 커밋을 현재 커밋으로 덮어쓰는 걸 의미한다.

 

 

Staging Area와 워킹 디렉토리 사이를 넘나들어보자, 두 영역의 상태를 확인할 때마다 변경된 상태를 되돌리는 방법을 알려주기에 매우 편하다. 예를 들어 따로따로 커밋해야 할 두 개의 파일이 있는데 git add *로 전부 staged상태에 들어갔다. 어떻게 되돌리면 될까?

 

git reset HEAD FILE_NAME

 

명령어를 이용하자. 

*reset명령어는 매우 위험하다. --hard옵션과 함께라면, 다만 옵션없이 사용하면 워킹 디렉터리 파일은 건드리지 않는다.

나중에 좀더 자세히 다루겠다.

 

Modified 파일 되돌리기

뭐 많이 사용할 수도 있다. 최근 커밋된 버전으로 혹은 처음 clone 했을 때처럼 그 내용으로 되돌리는 방법이 있다.

 

 git checkout --FileName 

 

이 명령은 원래 파일로 덮어쓴다. 변경한 내용을 쉽게 버릴 수는 없고 하지만 당장은 되돌려야 하는 상황이면 stash와 branch를 사용하자!

 

중요한 것은 git으로  commit한 것은 모두 복구할 수 있다. 이 말은 역도 성립한다는 점 알아둬야 한다.

반응형

'Git' 카테고리의 다른 글

Git Branch  (0) 2021.02.11
Git 기초 명령어(3)  (0) 2021.02.10
Git 기초 명령어  (0) 2021.02.10
Git 설치  (0) 2021.02.10
Git 기초  (0) 2021.02.10

댓글