기본적이 세팅이 되어 있다고 가정 [얄코 님의 강좌를 수강하였습니다.]

 

파일이 담기 는 폴더를 정합니다. 최상위 폴더 최상위 디렉토리가 되는 것이죠.

저는 git-practice로 했습니다.

 

 

이 폴더를 vs에서 깃으로 관리하도록 설정해 보도록 하겠습니다.

기본적인 이메일 및 유저네임 등등 설정이 되어 있다고 가정하였습니다.

 

git init

 

이제 이러 저런 모든 수정내역들이 다 들어 가 있는 숨김파일이 생성됩니다. 깃 관리 내역을 모두 지워버릴 일이

생기지 않는 한 절대 지워서는 안됩니다. 추후에 협업을 하게 되거나 그럴 경우 깃허브에서 당겨 받게 되는데

그렇게 작업을 하는 중에서도 건들게 될 일이 거의 없습니다.

 

저 코드를 입력하면 이제부터 깃은 이 폴더에서 일어나는 모든 내역을 저장 및 기록하게 됩니다.

 

git status

뭐라뭐라 하면서 파일을 만들었던 2개가 명시되어 있는 것을 볼 수 있죠.

 

두번째는 깃에게 맡기지 않아도 되는 정보가 있을 겁니다. 보안상 민감한 정보일 수도 있고 굳이 나중에 깃헙에 올릴 필요까지 없는 정보들이 있을 수 있고요

먼저 파일명이 secrets.yaml 을 만듭니다.

 

그리고 추가적으로 .gitignore 를 만듭니다. 말그대로 깃 이그노어(무시) 인데 이 파일 안에 무시해도 될 파일 명을 그대로 옮겨 주시면 되겠습니다.

주로 쓰는 파일 무시 관련 서식입니다.

 

# 이렇게 #를 사용해서 주석

# 모든 file.c
file.c

# 최상위 폴더의 file.c
/file.c

# 모든 .c 확장자 파일
*.c

# .c 확장자지만 무시하지 않을 파일
!not_ignore_this.c

# logs란 이름의 파일 또는 폴더와 그 내용들
logs

# logs란 이름의 폴더와 그 내용들
logs/

# logs 폴더 바로 안의 debug.log와 .c 파일들
logs/debug.log
logs/*.c

# logs 폴더 바로 안, 또는 그 안의 다른 폴더(들) 안의 debug.log
logs/**/debug.log

 

눈에 띄는 거는 *.확장자로 다 무시해도 이거는 무시하자 마라 할 때 쓰이는 것은 다음 입니다.

!not_ignore_this.확장자

 

여기서부터는 중요해집니다. 깃에 저장될 변경사항을 캡슐에 넣어서 보관해야 합니다. 그 캡슐을 저장하는 행위를 커밋이라고 할 거고 다음 코드를 입력합니다.

git status

아직 커밋되지 않았다면서 (언트랙트) 커밋할 수 있는 조건이 되었습니다. 먼저 캡슐에 넣고 던져야(커밋해야) 됩니다.

git add 파일명

왜 하나하나 해야하냐 두개 다 넣으면 되지 않냐라는 질문이 나오면 정말 좋은 겁니다. 아래 코드는 모든 커밋할 내용의 파일들이 캡슐에 적재됩니다.

git add .

하지만 하나만 변경사항이 있을 수도 있다보니 개별 파일별로 캡슐에 넣는 것도 알고 있어야 합니다.

완료되면 아래코드를 입력합니다.

 

git commit

그러면 그전과는 달리 타이핑도 안되고 처음 보는 화면이 나옵니다. 실무에서는 여기를 들어갈 일이 없다고 해요. 그럴만한 이유는 바로 밑에서 설명합니다. 지금 화면은 마우스가 없었던 시절에 있었던 CLI라고 보시면 되고 Vim 화면이라고 합니다.

i 를 누르고 First commit 입력 후 :wp 누르면 저장하고 나오게 됩니다.

이 내용은 " First commit이라는 커밋이름으로 캡슐저장된 내역의 커밋이 생성" 됨을 의미합니다.

허나 커밋 메시지와 함께 저장을 하는 방법이 있습니다.

git commit -m "FIRST COMMIT"

이 방법을 하시면 됩니다. 그러면 git commit 들어가고 빔모드에서 어쩌구 저쩌구 안해도 되겠죠?

소스트리에서 보시면 드디어 첫 커밋이 발행되었습니다.

 

이제 수정했을때를 생각해서 시뮬레이션 해보겠습니다.

먼저 lions를 삭제하고 tigers에 수정사항을 만들었습니다.

그리고 나서 git status를 해보면

보시는 것 처럼 지워진거 내역 보여주고 수정된거 내역 보여집니다.

leopard는 추가된것이죠. 

 

코드중 git diff 는 수정사항을 더 자세히 알려줍니다.

 

이제 git add . 를 해줍시다. 캡슐에 저장을 하고 커밋 이름 정하고 커밋하면 됩니다.

git status 를 입력하면 정상적으로 처리된 모습입니다.

 

git commit -m "커밋 이름"

추가로 add 하면서 동시에 커밋 이름 짓고 커밋하는 방법은 다음과 같습니다. 

git commit -am "(커밋이름)"

그러나 새로 추가된 파일이 없을때만 가능합니다. 지금 같은 경우는 leopard 파일이 생겼죠 ? 그렇다 보니 이 방법은 쓰실 수가 없습니다. 

(중략..)

 

이제 reset과 revert가 등장합니다. reset은 해당 커밋을 삭제해버리는 명령어 입니다. revert는 해당 커밋에 반대되는 행동이 일어나게 됩니다. 삭제 했다면 다시 원상복구 되고 추가 했던 이력들은 반대로 그대로 삭제조치되죠. 어차피 지우는 거면 왜 revert를 쓰냐고 생각할 수 있지만 revert를 실무에선 더쓴다고 합니다. 한번 공유된 커밋들을 삭제시켜버리면 다른 개발자가 작업하고 있는 코드와 충돌할 수 있기 때문이죠. 리셋이 능사는 아니라는거 그리고 revert만 쓰게 될거라는 것도 알고 있으면 될거 같네요.

 

리셋을 해보도록 하겠습니다.

git reset --hard (돌아갈 커밋에 해당되는 해시)

소스트리로 확인해봐도 제대로 돌아간 모양이죠. 해당커밋은 소스트리에서도 확인할 수 있고 vs코드로 git log를 통해 알 수 있습니다.

 

그럼 다시 한번 복구를 해볼까요? 아까 복구 해 놓았던 .git 파일을 다시 최상위 디렉토리에 이동시킵니다.

그럼 소스트리든 vs코드에서도 정상적으로 복구 된 내용입니다.

 

 

리버트를 해봅시다.

취소할 커밋의 해시를 찾습니다.

해당 해시와 함께 아래코드를 입력합니다.

git revert 돌이킬 해시코드

그러면 최종적으로 깃 로그를 보면

리버트 했다는 커밋이 기록됩니다. 이렇게 리버트는 해당 행위를 했다는 기록까지 남겨줍니다. 협업시 혹은 나중에 개발 방향이력을 복기 할 때 좋겠죠?

 

리버트를 사용할 경우에 이런 문제가 발생할 수 있습니다. 2번 커밋은 각기다른 파일의 수정과 추가 삭제 조치가 있었습니다. 그런데 지워버린 파일에 4번 커밋이 수정을 하게 될경우 충돌하게 됩니다. 그러면 어떻게 해야할까요 컴퓨터가 알아서 할 수 있을까요. 한번더 조치및 액션을 해줘야합니다. 삭제를 하는게 맞죠 없는 파일의 수정을 할 수는 없으니까요

여기서 파일 삭제 명령을 해줍니다.

 

git rm 파일명.확장자

 

그 이후에는

git revert --continue

하고 :wp로 마무리하시면 되겠습니다. 과거와 현재를 오고 갈 수 있는 것이죠.

 

git revert --no-commit 해시코드

이번 커밋에서 리버트 하고 다른 변화도 아직 남아 있을때 바로 커밋을 하지 않는 다는 명령입니다.

(reset 쉬워서 패스)

revert를 해봅시다. revert의 경우 먼저 발생한 커밋을 되돌링 경우 만약에 생성한 파일을 되돌려서 삭제했는데 이 삭제를 한 파일에 수정을 하게 되어 있는 커밋이 뒤이어 있을 경우 어떻게 될까요? 충돌이 발생하게 됩니다. 한번 보죠

지금 소스트리의 두번째 커밋을 리버트를 하였습니다. 다음과 같이 reverting이 뜨면서 진행중이라고 뜹니다. 아직 완료되지 않은 것이죠.

 

문제가 있다고 뜬것입니다. 직접적으로 해결해 줘야 합니다. 더하든 빼서 해결을 해줍니다. 지울거예요 저희는

git rm 파일명.확장자

그 이후

git revert --continue

 

성공적으로 입력 명령이 되었습니다.

 

리버트 한것을 다시 리버트할 경우도 있겠죠? 그럴 경우 그냥 리버트 하기전으로 리셋 하면 됩니다. 리셋을 해줍시다.

 

그리고 커밋하지 않고 리버트 하려면 어떻게 해야 할까요? 그럴 경우엔

git revert --no-commit 해시코드

직관적으로 노 커밋이 보이시죠? 리버트 이후에도 해당 커밋(캡슐)에 해야할 작업이 있을 경우에는 이렇게 하면 되겠습니다.

 

중간에 취소하려면 아래코드를 쓰면 됩니다.

git reset --hard

 

소스트리로 해보겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기