민스씨의 일취일장

TIL | LogT | GIT | Git과 GitHub에 대해 알게된 내용과 고민들 본문

VCS & Collaboration Tools/Git

TIL | LogT | GIT | Git과 GitHub에 대해 알게된 내용과 고민들

읻민스 2023. 4. 17. 18:49
반응형

Git에 대해서 공부하면서 알게된 내용들과 고민들을 시간순으로 기록하는 글이다.

Git & GitHub

git & github 썸네일 이미지이다.
git & github

모두의 깃 & 깃허브 <강민철>

모두의 깃&깃허브 책의 저자가 직접 강의하는 인프런 강의를 수강하기 시작했다. 책과 강의를 함께 공부한 내용 중 깃과 깃허브에 대한 내용과 민스씨가 이해한 내용으로 기록할 것이다.

*강의와 책 모두 직접 구매해서 공부하고 있다. 강의가 궁금하다면 아래의 링크를 참조하면 된다.

 

모두의 깃 & 깃허브 - 인프런 | 강의

길벗출판사 [모두의 깃&깃허브] 서적의 강의입니다. 깃과 깃허브를 이용한 버전관리의 핵심만을 모았습니다. 개발자의 필수 교양이라 할 수 있는 깃을 명령어 없이, 명령어로 다루는 방법과 깃

www.inflearn.com


2023년 4월 17일

버전 관리 이론

깃은 프로그램의 버전을 관리하는 프로그램으로 기초적으로 세개의 공간을 관리한다고 생각하면 된다.

1. 작업 디렉토리 - 킹 디렉토리, 워킹 디렉토리라고도 불린다.
- 버전 관리 대상의 루트 위치로 .git 폴더가 있는 위치를 말한다.
⬇️ add
2. 스테이지 - 깃이 관리 하는 가상공간이다.
- 작업 디렉토리에서 다음 버전이 될 후보들이 올라가는 공간이다.
* 작업디렉토리에서 작업한 모든 내용이 다음 버전의 후보가 될 필요는 없다. 원하는 파일들만 선택해서 스테이지에 올릴 수 있다.
⬇️ commit
3. 저장소 - 깃이 관리하는 가상공간이다.
- 스테이지에 올라온 내용들을 하나의 버전으로 만들면 그 내용이 저장소에 저장된다.

커밋 메세지

commit을 할 때는 어떤 내용이 새로운 버전으로 반영 됐는지 설명해야 한다. 기본적으로 제목과 상세내용 두부분으로 나눠 작성한다. 제목은 전체 내용을 한 문장으로 요약해 작성하고, 본문은 변화 및 주의사항등 버전에 필요한 정보를 길이에 상관없이 자세히 작성해 준다.

커밋 해시

commit을 할 때마다 새로운 버전들이 쌓이게 된다. 각 버전들은 모두 다른 고유한 정보이를 담고 있기 때문에 각 커밋을 지칭하는 고유한 id를 갖고 있다. 이 id를 커밋해쉬(commit hash)라고 부른다. 커밋해쉬는 숫자와 문자들의 나열이기 때문에 컴퓨터는 각각이 다른걸 문제없이 인식하지만 사람은 바로 그 긴 문자들을 인식하기 어렵다. 따라서 쉽게 찾기 위해 앞의 몇 글자만 따서 대괄호 "[ ]" 안에 넣어 표기하기도 한다.

39849a98r90qw38408q304 -> [39849a]

커밋 태그

수많은 commit들을 쌓아 나가다 보면 어느 순간 소기의 완성본이나 중요한 버전이 생기기 마련이다. 이렇게 특별히 중요한 버전에는 이름을 또 하나 따로 붙여주면 유용하다. 이럴 때 사용하는 것이 커밋태그이다. 태그의 내용은 임의로 작성하면 된다. 다만 버전관리에 참여하는 사람들이 그 태그를 이해할 수 있어야 한다.

 


2023년 4월 18일

버전 되돌리기

버전을 되돌리는 방법에는 두가지가 있다. revert(커밋 되돌리기)와 reset(이 커밋까지 현재 브랜치를 초기화하기)이다.

revert

revert, 우리말로 "커밋 되돌리기"는 과거의 버전과 똑같은 버전을 새로운 버전으로 커밋하는 것이다. 다시 말해서 다음 버전이 과거의 한 버전이 되는 것이다. revert의 특징은 지금까지 만든 모든 과정을 유지시킨다는 점이다.

reset

reset, 우리말로 "(이 커밋까지 현재 브랜치를) 초기화하기"는 돌아가고 싶은 이전의 버전으로 돌아가고 그 이후의 커밋들은 삭제하는 것이다. 즉 시간을 되돌아 간다고 생각하면 이해하기 좋다. reset은 작업한 내용들을 삭제하는 다소 위험할 수 있는 작업이기 때문에 삭제에도 3가지 단계를 두었다. soft, mixed, hard인데 하나씩 살펴보자.

  • soft

마지막에 커밋(commit)한 내용만 삭제한다. 또는 커밋하기 직전으로 되돌린다고 생각할 수 있다. 그렇기 때문에 지금까지 작업한 작업 디렉토리내의 파일은 그대로 있고, 스테이지로 추가(add)한 내역도 그대로 있다. 

  • mixed

마지막 커밋한 내용에 더해 스테이지로 추가(add) 했던 내용까지 삭제한다. 하지만 여기까지도 컴퓨터에서 작업 실제 파일들은 그대로 있는 상태이다.

  • hard

hard는 말 그대로 완벽하게 이전 상태로 돌아가는 것이다. 커밋한 내용, 스테이지로 add한 내용 그리고 작업 디렉토리에서 지금까지 작업한 내용이 모두 삭제되고 이전 상태로 돌아간다.

스태시

스태시는 현재 작업한 내용을 커밋하지 않고 따로 임시저장하는 기능을 말한다. 이 때 스태시한다라고 말한다. 그럼 작업디렉토리는 이전 커밋 상태로 되돌아 가고 다시 작업을 시작할 수 있다. 그리고 언제든 스태시 해놓은 내용으로 되돌아 갈 수도 있다.


2023년 4월 19일

브랜치

메인 버전에서 또 하나의 다른 버전으로 흐름을 이어나가진 걸 브랜치라고 한다. 각 브랜치는 서로 독립적이라 하나의 새로운 버전으로 볼 수 있다. 이렇게 따로 작업하던 브랜치들을 필요에 의해 합칠 수도 있다.

모든 브랜치는 각자의 고유 이름을 갖는다.

현재 작업 중인 브랜치를 가리키는 것이 HEAD이며 다른 브랜치로 이동하는 것을 체크아웃이라고 한다.

브랜치 삭제하기

브랜치를 삭제하기 위해서는 다른 브랜치에 체크아웃된 상태여야 한다.

브랜치 합치기

브랜치를 합니는 것을 merge라고 한다. 브랜치를 합치기 위해서는 HEAD가 서브브렌치에 위치해야 한다. 서브 브렌치가 main즉 더 큰 브랜치로 합쳐지도록 한다.

병합시에 충돌이 발생하면 git은 소스코드 내에 충돌이 일어난 곳을 표시해 준다. 여기서 원하는 것을 취하고 나머지는 다 지운 다음 다시 커밋을 해줘야 한다.


2023년 4월 20일

 

 


2023년 4월 24일

Git Repository 생성

$ git init

작업 디렉토리 상태 확인

$ git status

스테이지에 추가하기

$ git add fileName

커밋하기

$ git commit -m "commitMessage"

커밋한 버전들 확인하기

$ git log

작업내역 비교하기

$ git diff

* 커밋하기 전에 사용한다.

작업 되돌리기

$ git revert 취소할 커밋
$ git reset 돌아갈커밋
$ git reset --soft 돌아갈커밋
$ git reset (--mixed) 돌아갈커밋
$ git reset --hard 돌아갈커밋

작업 임시저장하기

$ git stash
728x90
반응형