웹풀스택 공부 중
Git & GitHub 본문
Git
- 다양한 버전: 로컬에서 다양한 버전 작업이 가능하다
- 히스토리 추적
Github
- 협업 관리: 동료 개발자가 적용해놓은 최신 코드를 이어 받아 개발하기 + 내 작업 공유
- 안전히 원격 저장: 로컬 작업 내용을 모두 원격으로 백업
Git 시작 하는 두가지 방식:
- Remote에서 시작
- Local -> Remote 에 Push =
git push
- Local -> Remote 에 Push =
- Local에서 시작
- Remote (Github repo) -> Local로 Clone =
git clone
- Remote (Github repo) -> Local로 Clone =
Local (Git)과 Remote(Github)의 보안 통신 방법
- 두가지 방식: HTTPS & SSH
- HTTPS: ID/PW를 매번 작성해야하기에, 키로거 공격 위험 및 실제 사용 시 번거로움이 있을 수 도 있다
- SSH: 비대칭키를 사용하여 ID/PW 없이 간단히 통신 가능하다
- `ssh-keygen -t ed25519 -C "name@example.com": 으로 SSH키 생성기로 비공개/공개키 생성 가능
- Github Settings에서 SSH Key 등록이 필요하다
- `ssh-keygen -t ed25519 -C "name@example.com": 으로 SSH키 생성기로 비공개/공개키 생성 가능
Local Repo Setting 방법
- git init: 현재 작업중인 프로젝트를 Git으로 관리하겠다고 선언
- git branch -M main: 디폴트 브랜치 명칭 변경
- git remote add origin (ssh_key_val): 업로드할 git repo 정하기
- git push -u origin main: Git repo로 올리기
Remote 주소 관리 및 Local / Remote Branch 관리
- Git은 크게 Local(Git)과 Remote(Github)로 나눠 생각하면 된다
- Remote: 여러 사람의 작업이 모두 모여있고
- Local: 내 작업이 모여있는데 Remote에 있는 타 사람 작업의 참조(reference)도 가지고 있다
- Remote 주소 관리:
- 코디를 어디서 다운로드 할지 (fetch)
- 코드를 어디에 업로드 할지 (push)
git remote -v
로 확인 가능
- Branch 관리: 모든 브랜치는 로컬에서도 관리가 가능하다
- Local Branch CRUD
- Remote Branch CRUD
- CRUD
- Read: 조회
git branch -a
: Remote(-r) + Local(-l) Branch 전체 조회
- Create: 추가
git checkout -b branch_name
- 기준이 되는 branch에서 새로운 브랜치 생성이기에, 저 명렁어를 어느 브랜치에서 입력하느냐가 중요하다
- Delete: 삭제
- Local Branch Delete:
git branch --delete/-D branch_name
- --delete: 현재 브랜치가 어디에도 merge되지 않았다면 경고와 함께 삭제되지 않음
- -D: 강제 삭제
- Remote Branch Delete:
git push --delete origin branch_name
- origin: 원격 주소 별칭 (Alias)
- Local Branch Delete:
- Read: 조회
- Remote 주소 관리:
Local Branch에 Remote Branch 동기화
- Pull = Fetch + Merge
- Fetch: Remote에서 생성/삭제된 브랜치를 가져오고 최신 코드 모두 가져온다
- `git fetch -p
- p: prune (가지치기)
- `git fetch -p
- Merge: Remote의 최신 코드를 Local의 구식코드에 합치는 작업
git merge FETCH_HEAD
- FETCH_HEAD: 수정된 Remote Branch의 최상위 (최신) Branch를 뜻하는 말
- ORIG_HEAD: (Local에서 )현재 HEAD가 가르키는 커밋 바로 직전의 커밋
- 백업용이다
- MERGE_HEAD: FETCH_HEAD + LOCALHEAD를 합칠때 충돌 발생 시 충돌 해결을 위한 Merge Commit이다
- "충돌난 둘이 합친다"
- Fetch: Remote에서 생성/삭제된 브랜치를 가져오고 최신 코드 모두 가져온다
- PULL REQUEST = FETCH + MERGE
- Remote에서하는 pull이라고 생각하면 된다
Conflit
- 다른 사람이 같은 파일에 다른 작업을 수행하여 둘의 작업이 안맞는것
- 이 둘을 합쳐야한다!
- 해결 방법은 두가지: Rebase, Merge
- 이 둘을 합쳐야한다!
Rebase
- 현재 내 작업물의 (1) Base를 다시 재설정한 뒤, (2) 다시 커밋을 쌓는다
- 단점: 히스토리가 리셋된다...
Merge
- 현재 내 작업물과 remote에 업로드외어있는 상대 작업물 모두 전중하고, Merge Commit을 만든다
- Merge Commit이 많이 생성되어 commit이 조금 더러워진다
Conflict 해결
- 4 가지 전략: git merge
--no-ff
origin/main 처럼 command로 어떤 방식을 쓸지 정할 수 있다- Fast Forward
- 부모 브랜치의 최신 HEAD를 자식 브랜치의 최신 HEAD가 바라보도록 한다
- 한게 없을때 그냥 HEAD만 움직여 코드를 최신화한다
- Conflict 날게 없다
--ff
- 3-Way Merge
- 충돌 발생 시, 충돌 해결을 위한 merge commi 생성
- merge 시
git commit
까지만 작성하면 자동으로 commit message를 생성해준다 vi (file_name)
으로 text 에디터로 merge conflit를 해결할 수 있다dd
는 라인 삭제i
는 라인 추가- 수정 후 esc -> enter -> :wq로 세이브하면 된다
--no-ff
- 제일 자주 쓰는 방식
- Rebase and Merge
- 부모 브렌치의 HEAD를 그대로 둔체, 그 기점부터 새로운 Commit 쌓기
- Rebase는 원래 다수의 Commit을 수정하기 위한 방법이지 Merge를 위한 방법은 아니다
- 과거로 돌아가서 다시 작업하는 방식
- 이후에 더 다룰 예정
- 3 가지로 컨트롤이 가능하다
- continue: 작업을 마치고 넘어간다
- skip: 작업을 안하고 넘어간다
- abort: rebase를 안하고 포기한다
--rebase
- Squash and Merge:
--squash
- 왠만해서는 사용하지 않는다
- Fast Forward
반응형
'웹개발 > 개발자' 카테고리의 다른 글
기초 코드 작성 방법 [rule of thumb] (3) | 2024.09.03 |
---|---|
Git Zone & Git Flow (0) | 2024.09.03 |
Git 구조 및 Remote vs Local (0) | 2024.09.01 |
Bash 명령어 (2) | 2024.08.27 |