기본개발지식
[git] Inflearn Git과 Github 기초
석태
2024. 1. 24. 16:59
inflean에서 제공하는 기초 Git 강좌에 대한 무료 강의이다.
git이란?
형상 관리 시스템(Version Control System)의 한 종류이다. 개발자들이 프로그램과 관련된 파일들을 저장하는 데 사용되며 게임으로 비유해보면 세이브(저장) 시점과 유사하게 비유된다.
저장 시점으로 언제든지 되돌리기가 가능하다.
git 기초 명령어
- commit(커밋)
세이브(저장)에 해당하는 행동을 git에서는 커밋이라고 한다.스테이지 영역의 파일들을 가지고 커밋(세이브)을 만들 수 있다.
- add(스테이지에 올린다)
커밋하기 전에 저장을 원한하는 파일들을 묶는 일을 해야 하는데 이것을 스테이지에 파일을 올린다라고 표현한다.
간단하게 말해서 스테이지 영역에 작업 파일을 추가하는 것이다
- push(github에 업로드)
커밋을 하게 된다면 현재 작업 내용의 저장 데이터는 내 컴퓨터에 저장되어 있다. 이걸 github에 업로드하여 원격 저장소에 저장하는 것을 뜻한다. 내 컴퓨터에 있는 데이터가 날아가도 안전하게 다시 복구 할 수 있는 원격저장소에 커밋을 업로드 하는 것이다.
- clone
원격 저장소를 복사할 때 사용한다.
checkout을 이용해서 저장하지 않은 변경 내용 취소하기
마지막 세이브 저장 시점으로 돌아가기 위한 명령어를 git에서는 checkout을 통해서 가능하다.
branch의 개념
- 브랜치 (branch) : 기능 변경을 하고 싶을 때 생성 및 사용
- 머지 (merge) : 한 브랜치의 내용을 다른 브랜치에 반영
- 체크아웃(checkout) : 저장소에서 특정 커밋이나 브랜치로 돌아가고 싶을 때 사
git을 사용할 때 자주 사용되는 말인 병합이란?
하나의 브랜치를 현재 브랜치와 합치는 것을 병합(merge)라고 한다.
현재 브랜치는 헤드(HEAD) 브랜치라고 한다.
예시)
현재 헤드 브랜치가 master이고 여기서 version브랜치를 병합하면 version2의 내용이 master에 반영되는 것이다.
병합 과정에 따른 상황 2가지
1. 헤드 브랜치에 변경 사항이 없고 병합 대상 브랜치가 헤드로부터 시작된 경우(fast-forward)
- 주로 혼자 작업을 할 때 발생되는 상황
- 헤드 브랜치(*이 붙어 있는)인 master에서 version2가 시작되고 두 번 커밋한 상태이다. 여기서 병합을 하면 단순하게 master 브랜치가 가르키는 커밋이 version2의 커밋으로 이동된다.


2. 헤드 브랜치에 추가적인 커밋이 생기는 경우 병합이 필요해진다.
- 커밋으로부터 브랜치를 생성해서 작업을 한 경우
- 새로운 브랜치 작업 이후에 헤드에 새 커밋이 생긴 경우
- 여러 브랜치를 동시에 작업하면서 병합을 시도할 경우


헤드 브랜치에서 타겟 브랜치를 병합하면 되는 과정으로 여러 브랜치에서 동시에 변경한 파일이 있을 경우 충돌이 발생할 수 있다.
커밋 되돌리기
1. reset 사용하기
- 장점: 쉬워요.
- 단점1: 커밋이 날아간다
- 단점2: 강제 푸시가 필요하다.
설명
- git reset --hard 에 해당하는 명령으로 커밋을 되돌리기
- reset 이후 push는 force 옵션을 선택해야 함
- 이전 커밋은 사라짐
- push --force 는 소스트리에서 지원하지 않기 때문에 CLI를 이용해야 함
2. reset 을 사용하지 않고 branch만들어서 되돌리는 방법
장단점
- 장점: 쉽다. 기록이 다 남아 있다.
- 단점: 트리가 지저분해진다.
방법
- 되돌릴 커밋 대상으로 브랜치 생성
- 체크아웃
- 변경 사항 수정 후 커밋
- master에 머지
revert
- 대상 커밋을 HEAD커밋의 자식으로 새로 생성한다.
주의사항
- revert 대상 커밋은 사라지지 않는다.
- revert 대상 커밋의 내용을 되돌린 새로운 커밋이 생겨난다.
장단점
- 장점: 이전 커밋 기록이 다 남아 있다.
- 단점: 충돌 날 가능성이 매우 높다. 다소 어렵다.
출처