[U Stage] Week5 Github 특강 3 - 깃 고급 기능

윰진·2022년 10월 20일
0

NaverAIBoostCamp정리

목록 보기
18/30

GOAL
1) rebase를 이용한 작업 순서의 조작
2) 코드 리뷰를 위한 pull request
3) 작업 한 내용을 취소하기 위한 revert
4) 하나의 변경사항만 가져오기 cherry-pick

참고
reset 은 local 저장소에 있는 것만 한다.
원격 저장소에 올라가 다른 사람이 올라가 있는 상태에서 하면 큰일나 !

  • 이 때는 revert 를 써야한다.

복습

git ignore

Tip gitignore template

.gitignore : 저장소에 올라가면 안되는 파일을 관리한다.

  • commit 해주어야 함

.git > info > exclude : 개인적인 정책

  • local 저장소에만 적용된다.

config.txt 의 경우, 애플리케이션 동작에 꼭 필요하지만 commit 되어서는 안되는 파일

  • 팀 정책 형식 자체는 공유해야하는 경우, file 뒤에 template 이라는 확장자를 붙인다.
    • 형식이 저장된 파일임을 약속

3-way merge

생활코딩 - git conflict - 알면 기능, 모르면 사고

시나리오

  1. master branch : common.txt 생성 및 commit
1
2
3
4
  1. exp branch : exp branch 생성
  2. git checkout -b exp
    branch 생성 및 checkout
  3. git branch
    현재 branch 명 확인
  4. exp branch git commit -am common.txt
1
e2
3
e4
  1. git checkout master
1
2
m3
m4
  1. master branch git commit -am "master common"
  2. git merge exp
    exp 에 commit 된 내용을 master 에 병합한다
  • exp 에서 하던 실험적인 작업이 끝났다 !
    참고 exp branch git merge master : exp 에 master 내용 병합

원격 저장소 생성

git remote add origin "저장소 주소"

git push --set-upstream origin exp

local 저장소와 원격 저장소의 어떤 branch 를 연결할지 알려줘야한다.

  • local 의 master 와 remote 의 master 가 pairing 됨

push 했는데 다른 branch 가 push 되었다 !?

  • git push -u origin exp

원격 저장소 클론

git clone "저장소 주소" . : 현재 directory 에 복사

같은 이름의 branch 라도 git 은 원격 저장소의 branch 와 로컬 저장소의 branch 를 따로 취급한다.

Branch 전략

Branch 를 효율적으로 사용하여 소스 코드를 효율적으로 관리하는 것

  • git flow

    release branch 를 만들고 release 에 포함될 기능만 여기에 commit

    • 자주 develop branch 와 merge
      release branch 를 master 와 병합
  • git flow 참고 사이트
  • git flow 는 fast forward 를 사용하지 않는다.
    • git merge --no-ff feature/short
  • relese branch 를 develop 으로 옮기자 !
    • git checkout release/1.0
    • git reset --hard develop

참고 fast merge off git config --global merge.ff no

참고 fast forward : branch 간 수정사항이 없는 경우에는 branch 가 이동하기만 하면 되어서 merge commit 없이 branch 이동이 생긴다. 하지만, git flow 에서는 어떤 것들이 병합되었는지 명확히 표시하기 위해 --no-ff 옵션으로 merge commit 을 강제 생성한다.

git reset --hard HEAD@{1}
git checkout develop
git merge --no-ff release/1.0 # develop 에 release/1.0 병합

git checkout 2321c # 첫번째 commit
git checkout -b master # master branch 생성 ( 처음에 잊어서.. )
git merge --no-ff release/1.0 
  • github flow

작은 작업 단위도 branch 에서 한다.
master branch 는 항상 정상 동작할 수 있어야 한다.

Pull Request

변경 사항 반영을 위해 요청하는 요청서

참고 commit message 오류 수정 : git commit --ament

작업 명세를 볼 수 있다

서로 다른 branch 의 작업 내용이 충돌날 때는 어떻게 될까 ?

상황 A, B 가 서로 다른 branch 에서 작업한 것이 서로 충돌났을 경우

Git 의 reference

commit 을 가리키는 reference 3 가지

  • HEAD
  • branch
  • tag
    • commit 에 이름을 붙임 ( 정적 )

Cherry Pick

하나의 commit 만 반영하고 싶은 경우
master 에서 exp 의 e2 까지만 병합하고 싶은 경우

git cherry-pick 3cfb0

Rebase

  • 오후 4시 10분부터 20분까지

    복잡한 timeline 을 간소화하기 위함
    merge 와 rebase 의 결과는 같다.


이미 commit 된 것을 지우려면 ?

git revert "취소하려는 작업의 commit id"

0개의 댓글