$ 개발 환경은 맥 OS Catalina 임을 알려드립니다 $

 

깃의 기본 사용 명령을 알아봤습니다!

 

오늘은 깃으로 자료의 기본 관리방법을 공부해보겠습니다.

 

깃은 기본적으로 자료관리를 위해 만들어졌기 때문에 기본 관리 명령어가 많습니다.

 

이번 포스팅은 좀 길어지겠네요.


저번처럼 깃 저장위치로 이동해줍시다.

< Command >

$ cd [git-name]

< Terminal Code >

$ cd hello-git

우선 지난 번까지 어떤 파일의 변화가 있어는 지 확인하기 위해 깃 로그를 확인해 볼까요?

 

< Terminal Code >

$ git log

 

저의 경우 이것저것 만져보다 보니 로그가 몇 가지 늘었는데요. 아마 여러분은 로그가 1개? 만 있을 겁니다.

 

git status로 깃 상태도 한 번 확인해 주시고요.

 

깃을 사용하는 가장 큰 이유 중 하나는 공동 프로젝트도 있습니다.

 

이런 경우 누가 어떻게 파일을 변경했는 지가 굉장히 중요합니다. 코드 하나로 많은 게 바뀌는 게 프로그래밍 세계니까요.

 

우선 실습을 위한 파일을 만들어 봅시다.

 

< Command >

$ vim [file-name]

< Terminal Code >

$ vim hello.cpp

약간 실전 느낌나게 cpp파일로 해봅시다.

 

저는 간단하게 이런 cpp 파일을 만들고 스테이징 후 커밋해보겠습니다.

 

스테이징과 커밋방법은 이전 글을 확인해 주세요.

 

vim 명령어는 접은글에 적어드릴게요~

더보기
< vim command >

1. a, i를 누르면 입력 모드로 들어갑니다,
2. ESC를 누르면 옵션모드입니다.
3. 옵션 모드에서 :를 누르고
4.:wq : 저장 후 종료
  :w : 저장
  :q! : 저장하지 않고 동료(임시파일 형성, !없으면 미형성)

 

만약, 여러분이 열심히 작업해놓은 프로그램을 누군가가 수정한다면 어떻게 될까요?

 

파일 작성했던 것처럼 명령어를 입력해줍시다.

 

저는 위와같이 파일을 수정했는데요. 이게 이렇게 보면 뭐가 문제인지 이해하기 어려우실 수도 있습니다.

 

C++글이 아니니 간단히 말씀드리면 floor함수는 cmath헤더가 없으면 안 됩니다. 컴파일 에러가 나게 됩니다.

 

누군가 저렇게 실수를 해놓는다면 당연히 파일은 오류가 나겠죠... ㅠㅠ

 

이때 git status를 입력하면 다음과 같이 나옵니다.

 

hello.cpp파일이 수정이 되었다고 하네요. 이건 뭐 제가 수정했으니 아는 거지 누가 올려버리면 모릅니다.

 

일단 올려 버립시다.

 

여느 때처럼 나와서 git log를 확인해 봅시다.

 

어? (물론 여기서는 제가 한 거지만) 누군가가 hello 파일을 변경했네요? 근데 얼마만큼 변경되었는지 알기가 어렵습니다.

 

이때는 아래와 같은 명령어를 입력하면 변경 상세정보가 나옵니다.

 

< Terminal Code >

$ git log --stat

 

또한 아직 스테이징이 안된 상황에서도 얼마나 변경했는지 알 수 있습니다. 즉 버전별로의 차이를 알 수 있죠.

 

cmath헤더가 없으니 vim으로 파일을 열고 추가해 줍시다.

 

git status로 확인하면 수정이 되었다고 뜹니다. 이때 아래와 같은 커맨드를 입력해주면 변경점을 알 수 있습니다.

 

< Terminal Code >

$ git diff

 

요렇게 말이죠! 꽤 보기가 편하네요. 이러고 이제 파일을 올려줍시다.

 


근데 물론 cmath 헤더를 추가하는 방향으로 수정도 했지만 사실 저 파일에 저 소수를 출력할 이유가 없습니다.

 

사실 제거를 해주는 게 제일 좋아 보이네요.

 

가장 좋은 건 올리기 전에 확인을 하고 올리는 것이지만 사람이란 동물이 완벽한 건 아니지 않습니까...

 

hello2.cpp 파일을 만들어 줍시다! 내용은 cout << "hello\n" 까지만요!

 

처음 만들어진 자료이므로 스테이징을 해줘야만 합니다. 바로 스테이징 + 커밋이 안됩니다.

 

hello2.cpp를 커밋까지 해주고 잘못 코딩한 것처럼 만들어 줍시다! cmath 헤더가 없었을 때 파일이랑 똑같이요!

아직 스테이징이 된 상태가 아닙니다. 누군가가 바꿔놓고 스테이징도 안 했나 보군요. 얼른 원래대로 돌립시다!

 

< Command >

$ git checkout -- [file-name]

< Terminal Code >

$ git checkout -- hello2.cpp

 

제대로 입력했다면 아무것도 안 뜹니다. cat 명령어로 확인해 봅시다.

다행히 원래대로 돌아왔네요...

 

이 정도로 해결했다면 참 다행이지만 만약 스테이징을 했거나 커밋을 했다면 어떻게 할까요...?

 

스테이징을 했다고 쳐보고 진행을 해봅시다.

스테이징을 진행했으니 이제 다시 스테이징 이전 상태로 돌려야 합니다.

 

아래 명령어를 입력해주세요.

 

< Command >

$ git reset HEAD [file-name]

< Terminal Code >

$ git reset HEAD hello2.cpp

명령어를 입력하면 스테이지에서 해제되었다고 뜹니다.

그리고 상태를 확인해보면 스테이징 이전 상태로 되어 있습니다!

 

이때는 체크아웃으로 수정하면 되겠네요!

 

이번엔 커밋까지 해버릴까요?

이제 완전히 커밋까지 해버렸습니다! 골치가 아파진 거 같네요. 지만 생각보다 그렇게 골치가 아프진 않습니다.

 

< Terminal Code >

$ git reset HEAD^

한 줄만 입력하면 바로 직전 커밋은 최소가 됩니다. 이 방법으로 커밋을 취소하면 스테이징도 동시에 취소가 됩니다.

 

reset 옵션은 인터넷에 찾아보면 나오니 확인 바랍니다.

 

하지만 만약에 나~~~~ 중에 데이터가 변경된 걸 확인했다면 어떻게 할까요?

 

바로 위에 사진에 보시면 commit dd241~~ 이렇게 적힌 것이 보이시나요? git log에는 각 커밋마다 커밋 해시가 존재합니다.

 

이때는 아래와 같이 입력하면 됩니다.

 

< Command >

$ git reset --hard [commit-hash]

 

다만 위의 명령어를 입력하면 해당 해시 이후로 기록한 모든 저장기록이 지워지니 주의하셔야 합니다!!!

 

그 외에도 revert를 활용하면 커밋 메시지가 수정도 가능합니다~

 

이번 글은 좀 길었네요. 아무래도 깃은 데이터 관리의 중요성으로 나온 거다 보니 데이터 관리 명령어가 많았습니다.

 

다음 시간엔 브랜치에 대해서 알아볼 듯합니다.

 

반응형