반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

웹풀스택 공부 중

Git & GitHub 본문

웹개발/개발자

Git & GitHub

lukeit 2024. 8. 27. 13:34

Git

  • 다양한 버전: 로컬에서 다양한 버전 작업이 가능하다
  • 히스토리 추적

Github

  • 협업 관리: 동료 개발자가 적용해놓은 최신 코드를 이어 받아 개발하기 + 내 작업 공유
  • 안전히 원격 저장: 로컬 작업 내용을 모두 원격으로 백업

Git 시작 하는 두가지 방식:

  • Remote에서 시작
    • Local -> Remote 에 Push = git push
  • Local에서 시작
    • Remote (Github repo) -> Local로 Clone = git 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 등록이 필요하다

Local Repo Setting 방법

  1. git init: 현재 작업중인 프로젝트를 Git으로 관리하겠다고 선언
  2. git branch -M main: 디폴트 브랜치 명칭 변경
  3. git remote add origin (ssh_key_val): 업로드할 git repo 정하기
  4. 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에 Remote Branch 동기화

  • Pull = Fetch + Merge
    • Fetch: Remote에서 생성/삭제된 브랜치를 가져오고 최신 코드 모두 가져온다
      • `git fetch -p
        • p: prune (가지치기)
    • Merge: Remote의 최신 코드를 Local의 구식코드에 합치는 작업
      • git merge FETCH_HEAD
        • FETCH_HEAD: 수정된 Remote Branch의 최상위 (최신) Branch를 뜻하는 말
        • ORIG_HEAD: (Local에서 )현재 HEAD가 가르키는 커밋 바로 직전의 커밋
          • 백업용이다
        • MERGE_HEAD: FETCH_HEAD + LOCALHEAD를 합칠때 충돌 발생 시 충돌 해결을 위한 Merge Commit이다
      • "충돌난 둘이 합친다"
  • 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
        • 왠만해서는 사용하지 않는다
반응형

'웹개발 > 개발자' 카테고리의 다른 글

기초 코드 작성 방법 [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