티스토리 뷰

baby steps/Git

Git 기초지식 00/ 기초 버전관리 명령어

무니웜테일패드풋프롱스 2020. 3. 8. 11:06

해당 글은 생활코딩 GIT CLI 강의를 바탕으로 작성되었습니다.

 

git은 버전관리 시스템이다! 즉, 내가 작성하고 있는 문서가 여러사람들에 의해 함께 작성될 때,  문서의 각각의 버전을 저장해주는 것이다. 마치 우리가 어느 파일을 저장하고 계속해서 파일의 내용을 수정할 때 "ppt 파일 _최종" "ppt_진짜최종" "ppt_진짜진짜최종"... 이렇게 반복하는 것을 간편하게 관리해주는 시스템이라고 생각하면 된다.

 

고로 굉장히 편리하다..하지만 입문자에게는 깃이라는 것 자체가 매우 어렵게 느껴진다! 여러가지 헷갈리는 명령어들이 난무하고..혼자하는 작은 프로젝트에 써먹기에는 상당히 복잡한 시스템이기 때문이다 

 

그럼에도 불구하고 개발자 지망생이라면 꼭! 반드시! 알아야할 것이 깃/깃헙의 사용법이다! 이걸 알아야만 다른 사람들과 협업할 수 있기 때문이다!!

 

그렇다면 앞으로 천천히 git의 여러가지 명령어들 , 동작원리를 알아보도록 하겠다 

 

pwd

현재 내가 있는 파일의 위치를 알려준다

 

cd ~ 

~에는 내가 있을 파일의 이름을 작성하도록 한다! 이 파일로 위치를 바꾸는 것이다

 

git init

해당 디렉토리를 이니셜라이즈 해준다는 것이다!  즉 깃 저장소를 생성해준다는 것! 이 명령을 하기전까지는 일반 디렉토리이지만, init을 해준 후 부터 해당 디렉토리는 로컬 깃 저장소가 된다! 따라서 이 후부터 깃 명령어가 가능 

 

ls -al

저장소에 있는 파일들을 보여준다

 

git status

현재 git의 상황을 알려준다!  만약 어떠한 파일을 변경했는데, 해당 파일이 add가 안되었다면 빨간 글자로 'modified 파일이름' 이렇게 나올 것이다. 이는 add를 안해주었기 때문에 아직 '커밋 대기'상태가 아니라는 것을 의미한다! 

 

git add ~

어떠한 파일을 만들거나 수정했을 때 꼭! git add를 해주어야한다. 중요한건 처음 파일을 생성했을 때 뿐만 아니라, 파일을 수정했을 때도 'git add'를 해줘야한다는 것이다. 왜냐하면, "git add"를 해주면 일단 해당 파일은 '커밋 대상'이 되어 'stage area'에 위치되기 때문이다. 하지만, git add를 하지 않은 '수정된 파일'은 커밋 대상이 되지 않는다. 따라서 커밋하기전에는 무조건 git add를 해주어야 한다.

 

git commit

수정되거나 새로 생성된 파일을 '커밋'해준다! 이로써 해당 파일을 '이 버전으로 일단 저장할게~~'라고 해주는 것이다! 커밋이 되면 해당 파일은 stage area 에서 repository로 들어간다 

 

그렇다면 '커밋'은 왜하는가??

0) 각각 커밋의 차이점을 알 수 있기 때문

1) 과거의 특정 시점의 내용을 알 수 있기 때문

2) 과거로 돌아 갈 수 있기 때문

 

git commit -am 메세지 

여기서 a는 add m 은 message를 의미히한다! 따라서 따로 add하고 커밋 후 message를 작성할 필요 없이 이렇게 커밋해도 된다 이것은 최근에 수정한 파일을 커밋+add 해주겠다는 것!! 

 

git log

커밋의 히스토리를 각 커밋 메시지와 함께 보여준다! 

 

각각 버전과 버전사이의 '소스코드 상의 차이점'을 알려주는 명령어

  첫번째!! git log -p 여태까지 커밋되었던 모든 버전들의 차이점을 알려준다. 

  두번째!! git diff 커밋1주소..커밋2주소 : 커밋1과 커밋2사이의 차이점을 알려준다.

  세번째 !! git diff : 소스코드를 변경했을 때 , 가장 최근에 변경한 내용을 알려준다

                       => 커밋하기전에 내가 변경한 내용에 문제가 있는지 없는지 알 수 있음!!

(커밋후에는 쳐도 아무것도 안보임)

아래가 바로 git log-p 혹은 git diff를 했을 때의 화면 및 각각의 의미이다!

git log-p의 실행화면
git diff 주소..주소의 실행화면
파일 내용을 변경한 후 git diff 실행화면 
여기서 노란바탕으로 줄이 쳐져있는게 바로 커밋의 주소이다 

   

git reset 

커밋을 원하는 버전으로 되돌린다! 알아두어야 할점...!! 리셋은 절대 공유되고 나서 실행될 수 없다. 꼭! 공유하기 전에 리셋해놔야한다. 

내가 저 version 2 로 돌아가고 싶고, 그 위의 버전들을 삭제하고 싶다면, 해당 커밋의 주소를 복사하여

git reset 주소 --hard라고 해준다!

그러면 이렇게 위의 버전들은 삭제되고, version 2 까지만 남게되는 것이다!!

 

git revert 

revert의 경우 reset과 비슷한 개념 (원하는 버전으로 되돌린다) 이지만, reset과 실행 방식이 조금 다르고, 더 까다롭다.

먼저 hello1.txt 라는 파일을 만들어 차례대로 R3로 수정, R4로 수정, R5로 수정 후 커밋을 해놓았다. 그런데 내가 R3 버전으로 돌아가고싶다면 어떻게 해야할까? 

reset처럼 바로 git revert R4라고 한다면 revert에서는 충돌이 발생한다. 왜냐하면, revert는 R4버전~ 그 위의 버전 들을 바로 삭제하는 것이 아니라, R4버전은 그대로 내버려두되, 해당 (R4) 커밋에서의 변화를 취소하는 개념이기 때문이다. 그래서 만약에 R5를 먼저 revert하지 않고 R4를 revert하면, 깃은 R4보다 후에 커밋된 R5를 어떻게 처리해야할지 몰라 conflict가 발생한다.  

git revert R5커밋주소

 위는 "git revert R5커밋주소"를 실행시킨 후 화면이다. 위에서 설명한 개념과 같이 기존의 R5 커밋이 사라지는 것이 아니라, R5 커밋에서의 변화를 취소하는 것이다. 

revert 후 git log -p 실행

이를 통해 R4 버전으로 되돌아 갔음을 알 수 있다. 캡쳐화면에는 없지만 cat hello1.txt를 쳐도 R5가 아니라 R4가 출력된다.

 

그렇다면 실수로 conflict가 났다면 어떻게 해야할까

conflict 화면 
git reset --hard

실수로 conflict가 나면 당황하지 말고 git reset --hard를 입력하면 된다.  충돌이 일어나면 revert가 계속해서 fail된다 

위의 conflict화면에서 말하는 "unmerged files"는 "충돌이 있었다"라는 의미이다. 

 

 

여기까지가 가장 기초적인 git의 사용방법이었다

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함