* 이 글은 패스트캠퍼스: 백엔드 개발 부트캠프 과정 5기
git/github 특강 (강민철 강사님)을 듣고 정리한 내용입니다.
형상 관리 도구 (Configuration Management Tool) 즉, 버전 관리 도구(시스템)이라고 할 수 있다.
버전 = 유의미한 변화가 결과물로 나온 것
깃을 사용하면...
- 변경 내역들을 기억하며
- 필요하다면 작업을 되돌리며
- 여러명의 코드를 쉽게 나누고 합치며
개발할 수 있다.
작업 디렉토리(working directory)
: 버전 관리의 대상이 위치하는 공간 (.git 파일이 있는 디렉토리)
스테이지(index)
: 다음 버전이 될 후보가 올라가는 공간
저장소(repository)
: 버전이 만들어지고 관리되는 공간
add 할 파일이 많은데 add 제외 할 파일도 존재한다면...?
작업 디렉토리에 .gitignore
파일을 생성하여 제외 할 파일명을 작성한 후
git add .
를 수행한다.
자세히 설명하면...
: 버전을 되돌린 새 버전 만들기
: 버전을 완전히 되돌리기
reset은 지금까지의 작업 내역에 영향을 끼친다!
revert의 <취소할 커밋>과 reset의 <되돌아갈 커밋>을 혼동하면 안된다!
ex) 커밋1 - 커밋2 - 커밋3 이 있을 때
git revert 커밋3
=> 커밋3을 취소한 커밋4가 생성=> 결과: 커밋1 - 커밋2 - 커밋3 - 커밋4
git reset 커밋2
=> 커밋2로 되돌아가기 => 결과: 커밋1 - 커밋2
브랜치는 버전을 여러 개의 흐름으로 관리하는 방법
최초의 브랜치: master(main)
브랜치 이름은 그 브랜치가 어떤 목적을 가지는지 명시해 주는것이 좋다.
* 병합의 종류
1. 빨리감기 병합(fast-forward merge)
변함이 없던 브랜치가 마치 빨리감기하듯 내용이 업데이트되는 병합
ex) foo 브랜치에서 커밋이 쌓이는 동안 master 브랜치에서는 변함이 없었다.
이 때, master 브랜치로 foo브랜치를 병합시키면?
같은 부분을 다르게 수정한 경우 병합 시 충돌(conflict)이 발생한다.
충돌이 발생하면 깃이 충돌이 생긴 부분을 표시해주며,
이를 확인 후 최종 저장할 내용으로 직접 수정해주면 된다.
아래와 같은 형식으로 표시해준다.
<<<<<<< HEAD
현재 브랜치에 적힌 내용
=======
<브랜치A>에 적힌 내용
>>>>>>> <브랜치A>
해결 순서
1. 충돌을 해결한다(어떤 브랜치의 내용을 반영할지 직접 선별한다)
2. 다시 커밋(add, commit)한다.
아래의 변경 옵션을 선택하여 해당 커밋 앞에 작성 후 저장하면 수정 창으로 이동한다.
자주 쓰이는 옵션
원격 저장소 브랜치 이름
git clone <원격저장소 주소>
(깃허브 상에 존재하는) 원격 저장소를 로컬(클론 받은 컴퓨터)로 복제
git push <원격저장소> <푸시 할 브랜치>
git remote add origin <원격저장소 주소>
git branch -M main
git push -u origin main
git push
만 적어도 git push origin main
으로 인식함원격 저장소의 변경사항을 가져오되 병합하진 않는 방식
git fetch <원격저장소> <패치 할 브랜치>
패치한 내용을 보려면?
git checkout FETCH_HEAD
패치와 병합을 동시에 하는 방식
git pull <원격저장소> <풀 할 브랜치>
일반적으로 내가 소유하지 않은 원격 저장소에 푸시할 수 없다.
때문에, 원격 저장소의 오너에게 pull 요청을 보내 해당 저장소에 내 코드가 합쳐지도록 협업한다.
풀 리쿼스트 방법
1. 기여하려는 저장소를 본인 계정으로 포크(Fork)하기 (내 계정으로 복사본을 가져오는 행위임)
2. 포크한 저장소를 로컬에 클론하기
3. 브랜치 생성 후 작업하기
4. 작업한 브랜치 푸시하기
5. 풀 리퀘스트 보내기