Goru
Github 실습1 . git 강의 내용 정리 본문
git, github
git : 형상관리를 도와주는 도구로, 프로젝트 변경 사항을 저장하고, 히스토리 관리를 쉽게할 수 있게 도와줍니다.
git의 주요 기능
- 버전관리 : 소스 코드의 변경 이력을 추적하고 관리, 이전 버전으로 쉽게 되돌아갈 수있다.
- 협업지원: 여러 개발자가 동시에 작업을 할 수 있으며 합칠 수 있다, 코드 충돌을 감지하고 해결할 수 있게 해준다.
- 브랜치 관리: 독립적인 브랜치를 만들어서 관리 할수 있음, 브랜치를 병합하여 하나의 브랜치로 합칠 수 있다.
- 변경 이력 추적: 누가, 언제 어떤 내용을 변경 했는 지 확인할 수 있습니다.
* git 설치 후 버전확인 및 아이디 등록
// git 설치 버전확인
git --version
// 아이디 등록
git config --global user.name "Name"
git config --global user.email "email adress"
// 아이디 등록 확인
git config --list
github :git을 기반으로 한 원격 저장소 호스팅 서비스, 인터넷에 git 저장소를 올려 협업과 백업을 쉽게 할수 있도록 지원
로컬저장소 & 원격저장소
Repository(저장소)
- git을 사용할 수 있는 폴더
- git이 관리해주는 폴더
Local Repository : 내 컴퓨터에 git 폴더 (Repository) / Local 저장소에 코드를 작성하고, 변경사항을 Commit
하여 기록합니다.
Remote Repository : 인터넷에 올라가 있는 git 폴더(원격), Local에서 작업한 변경내용(Commit내용) 을 Remote
Repository 저장소에 변경사항을 업데이트 (협업, 공유) ->Push,Pull Request를 사용해
업데이트
※ 로컬저장소와 원격저장소가 자동으로 동기화 되지 않기 때문에 지속적인 동기화 작업이 필요합니다.
기본 사용법
⊙ 시작하기
git init
- 새로운 git repository를 생성
- .git directory가 생성되고 , 해당 폴더에서 모든 변경 사항이 Git으로 관리되기 시작함
- 원격저장소가 없고 원격저장소에 코드를 올리려면 동기화 작업이 필요
git clone
- Remote Repository를 복제하여 로컬 저장소에 가져옴
- 이미 존재하는 원격 저장소에서 프로젝트를 내려받아 로컬에서 작업을 시작할 떄 사용함
- push, pull등을 사용하여 원격저장소와 로컬저장소의 싱크를 맞춰야함
※ 변경사항 업데이트
- git add : 변경사항을 스테이지로 올리는 명령어
- git commit :스테이징 영역에 올리면 변경사항을 저장하는 명령어
- git fetch 원격 저장소의 변경 사항을 로컬로 가져오지만, 병합하지 않음
- git pull : 다른 브랜치의 변경사항을 가져옴
- git push : 변경사항을 다른 저장소로 업로드
- git ignore : .DS_Store .xcuserstate
브랜치(branch)
- 독립적인 작업 흐름 관리
- 처음 git repository를 만들면 main 또는 master 브랜치가 기본생성
- git branch : 브랜치 목록확인
- git branch 새로운 브랜치 이름 :브랜치 생성
- git switch 브랜치이름 : 작업중인 브랜치 변경
브랜치 합치기
Pull Request
- 브랜치의 작업물은 다른 브랜치에 병합하는데 확인을 받고 하기
- 같이 관리하는 main 브랜치가 있는데 다른 사람의 브랜치를 임의로 병합한다면 main 브랜치
오류 발생 확률이 높아짐 - 이를 막고자 pull request 하고 확인 후 합치는 기능
conflict
- 동일한 파일의 동일한 위치에서 개발자들이 코드를 각자 변경했다면,
git은 어떤 개발자의 코드를 사용해야 될지 결정을 못함 --> conflict 발생
브랜치를 병합하는 방법들 : Rebase / Merge / squash

Rebase
- 다른 브랜치의 최근 커밋내용 뒤에 현재 브랜치의 커밋을 재정렬 하는 방식
- 깔끔한 커밋 히스토리 유지
- 불필요한 Merge Commit을 생성하지 않음
- 단점은 충돌 발생 시 해결이 복잡해지며, 협업 브랜치에서 사용 주의
- 작업했던 커밋을 복사 해서 붙이는

Merge
- 기존 Commit 히스토리를 유지하면서 새로운 Merge Commit을 만들어서 병합
- 기존 브랜치의 히스토리가 유지됨
- 단점은 병합 후에도 원래 브랜치의 기록이 남아서 이력이 복잡해질 가능성이 있음
- 장점은 협업 시 누가 어떤 작업을 했는지 명확하게 남길 수 있음

Squash
- 여러개의 커밋을 하나로 합치는 방식
- 작은 변경사항이 많은 경우 커밋을 정리할 수 있음
- 깔끔한 커밋 히스토리 유지 가능
- 협업 시 자잘한 커밋들을 하나로 합쳐서 유지
- 하나의 큰 feature를 sub feature로 나누어서 작업하고 합치는데 유용함.
