본문 바로가기
Today I Learned 2024. 4. 16.

(24.04.16)[1주차] Git & GitHub Branch 정리

오늘은 머리가 아픈 터라 살짝 컨디션이 저조하지만,

그래도 조금 시간이 날 때 git관련해서 찾아보고 공부하는 시간을 가지려고 했다.


Git & GitHub Branch 정리

유튜브, 안내서 등에서 나름 공부하면서 짧게 간단하게 git과 GitHub에 대해서 정리를 했다

완전 다른 언어라(리눅스 Vim) 생소하더라도 git을 쓰기 위한 아주 기본적인 것중 기본이라고 생각하기 때문에

틈틈히 연습하면서 협업툴을 다루는데 익숙해질 수 있도록 해야할 것.

더보기

Git 설정

최초 설정

**git config —global user.name "(본인 이름)”**

**git config —global user.email "(본인 이메일)"**

  • 본인 아이디 이메일 설정

**git config --global init.defaulBranch main**

  • master를 main으로 바꾸는 기본 브랜치명 변경

git 제외 설정

**.gitignore 이름의 파일 생성 → 해당 파일안에 배제 파일명.extension 입력 또는 규칙을 통해 지정**

  • 보안상 또는 포함할 필요가 없는 파일을 설정할 수 있는것
    • 일종의 블랙리스트라고 생각
  • Springboot 등에서 항상 필수로 사용하는 것
  • git status 을 통해 확인을 가능

기타 규칙

타임캡슐에 담기 & 확인

git add

  • 캡슐에 파일 담기
  • 특정파일을 설정해서 담을 수 있는것은 버전마다 다르게 추가하고 싶을 때도 사용 가능하므로

git commit

  • 캡슐 묻기 = 새로운 버전으로 만든다
    1. Vim이 실행
    2. 입력 시작 i
    3. 입력 종료: ESC
    4. 저장 없이 종료(입력한 것 없을 시): :q
    5. 저장 없이 강제 종료: :q!
    6. 저장하고 종료: :wq
      • 진입시 맨 윗줄이 메시지이고, 자동으로 지정이 됬을 것이고, 그냥 git commit → :wq 를 눌러서 바로 commit 시킬 수 있음
      • 물론 첫째줄을 변경한 후, :wq 시켜도 가능
  • **git commit -m 뒤에 오는 메시지는 ‘' 로 지정 가능**

git commit -am ”메시지”

  • add와 commit을 동시에 하는 명령어
  • 단, Unchecked 즉, 새로 생긴 파일은 무시하기때문에 주의

git diff

  • git status 에서 보여지는 변경점을 더 자세하게 보여주는 역할

 

  • commit을 통해 묻은 타임캡슐을 파내서 다시 과거로 돌아가는 법

Reset & Revert

  • git에서 시간을 되돌리는 방법들

Reset

  • git에서는 과거로 돌아간다면 그 이후의 버전은 history에서 지움

Revert

  • Reset과 가능하나 지워진 history를 다시 돌아갈 수 있도록 가능
  • 중간 버전으로 돌아갈 수 있음

과거 돌아가기

Reset

**git reset --hard (commit id)**

  • commit id는 앞에 구분할 수 있는 몇글자만 써줘도 가능

**git reset --hard**

  • .git 폴더를 참조해서 가장 최근으로 만드는 명령어

Revert

git revert (commit id)

  • git commit 과 같이 vim 모드로 진입
    • :wq 로 완료
  • history에는 revert한 사실이 기록
    • 협업할 때 필수

충돌대응

  • 현재 파일이 돌아갈 파일의 변경점과 충돌이 발생할 경우 알다시피 맨 처음 것을 쓰기
  • 이 때, 진행후 **git revert --continue** 를 사용해서 revert 진행
    • 당연히 vim모드 다시 실행

git revert --no-commit (commit id)

  • 돌아갈 시점으로 돌아가되, 수정후 돌아가고 싶을 때, 커밋 전까지만 가지고 오는 명령어

 

Merge & Rebase

Merge

  • main branch에 새롭게 작업하고 있었던 branch의 내용을 한번에 병합한 commit을 생성
  • 단, history에서는 병합한 그 branch가 남아있게되면서 많은 branch가 있을 경우 복잡해질 수 있음

git merge main에merge할branch

  • 즉시 맨 main 끝으로 커밋
  • git branch -d 로 해도 그전 해당 log들은 존재

Rebase

  • main branch에 새롭게 작업하고 있었던 branch의 내용을 곧바로 떼어다가 붙여서 생성
  • history를 남기지 않고자하는 project도 있기 때문에 알고 있어야

**git rebase 현재branch가rebase할branch**

  • 붙일 branch로 switch한 후, 진행할 수 있도록
  • 단, 끝에 붙었기 때문에 main branch는 붙인 commit까지 도달을 못한상태
    • git merge main에merge할branch 을 한번더 작성을 해야 끝까지 main branch가 끝까지

브랜치 충돌

  • 충돌은 같은 위치에 다른 코드가 겹칠 경우 충돌
    • git은 결정할 수 없기 때문에, 작성자의 결정에 의존
  • 수락 선택 / 삭제 및 변경 후, 합의를 봤다라는 의미로 반드시 add commit 진행한다고 생각 !!
  • 반드시 충돌을 완료하고 merge/rebase 한 branch는 git brandch -d 를 통해 삭제할 수 있도록

merge일 경우

  • 여러개의 브랜치가 하나로 합쳐지는 것이기 때문에 충돌부분들을 작성자가 다 고쳐서 다시 commit 시켜서 해결

**git merge --abort**

  • 충돌해결이 불가일 경우, merge를 중단 후, 그전으로 다시 돌아감

rebase일 경우

  • 덧붙이는 형식이기 때문에 한 커밋 한 커밋 붙일때마다 일일히 다 해결을 해줘야함

**git rebase --abort**

  • merge와 똑같이 충돌해결 불가시, 강제 중단 후, 그 전으로 다시 돌아감

git rebase --continue

  • 하나하나 해결할 때 마다 continue 를 통해서 계속 해결 진행해야

 

 

 

GitHub 원리

  • git을 공유, 업데이트 하면서 프로젝트를 진행하는 방식
  • 모든 작업자들은 github에서 업데이트받기 → 개인업데이트 → commit 순서를 꼭 따라줘야함

GitHub repository와 연동

작업 기기에 GitHub 토큰 연결

  1. GitHub Setting - Developer Setting - Personal access tokens 에서 토큰 발급
  2. windows 11 기준 자격 증명 관리자 - 일반 자격 증명 - git:https://github.com - 편집 에서 비밀번호를 토큰으로 변경

기존 내 Git작업 폴더와 repository 연동

  • 해당 repository에 아무것도 없을 경우 아래의 명령어를 한번에 복사 → 바로 git 명령실행

**git remote add origin (해당 repository 주소)**

  • 원격 저장소로 로컬의 Git 저장소를 원격으로 연결한다는 명령어
  • origin
    • github 기본 저장소의 기본 이름, 이름을 바꿀수 있음
    **git remote**
    • 해당 원격저장소를 확인
  • **git remote -v fetch, push 주소포함 자세**

**git branch -M main**

  • 앞서의 config 에서의 master를 main으로 바꿔주는 명령어, 용어변경

**git push -u origin main**

  • 원격=origin의 브랜치=main를 기본연결=-u 해준다는 의미
  • 따라서, 이 코드 이후의 모든 코드에서 push를 입력해준다면 origin main으로 push한다는 의미

새로운 폴더에 GitHub repository 끌어와서 연동

git bash가 깔려있다고 가정

  • 가져올 새로운 폴더 열기 - 오른쪽 클릭 - Open git bash here 실행
  • 그 다음에 기초 session의 clone 을 활용해서 그대론 끌어올 수 있음

Push

**git push**

  • 기본적으로 commit을 한다면 그 커밋은 local에서 main이 origin(origin/main)보다 앞서게 되므로 Push로 밀어준다고 생각 바로 아래 참조
  • git push -u origin main 를 세팅할 때 했기 때문에 굳이 뒤에 입력을 하지 않아도 가능

강제Push

**git push --force**

  • 원격저장소 내용이 이상해서 Local에서 강제로 밀 때
    • 억지로 원격저장소를 끌어다가 내 시점으로 맞추는 것
  • 민감하기때문에 반드시 협의가 있거나 개인적인 프로젝트일 때 사용

Pull

  • 단! 모든 pull 이 진행이 됬다면 반드시 push 를 통해서 commit 들을 맞춰줘야함

**git pull**

  • GitHub에서 작업 폴더로 가져오는 것
  • 자신의 commit 상황과 pull에서 가지고 오는 GitHub 상황과 맞지 않을 경우가 발생
    • push 할 정보와 pull 할 정보가 모두 존재하고 있는 상태에서 내가 push에서 에러가 생긴다면 먼저 PULL을 시켜야함 아래 참조

**git pull --no-rebase merge 방식**

  • 저장소를 두 분기로 생각해서 저장소를 merge방식으로 합치는 명령어

**git pull --rebase rebase 방식**

  • 원격저장소를 일단 가져온 다음에, 내 저장소의 내용을 잘라서 덧붙이는 rebase방식으로 합치는 명령어
  • rebase와 똑같이 후에 git rebase --continue 를 사용해서 지행
    • 따라서 계속 커밋이 쭉 연결되는 형태
    • github을 사용하는 협업 상태에선 rebase 사용가능! : Local과 분리된 환경이기 때문에