GitHub 특강 정리

Jeonghyun·2022년 10월 17일

Day 1 / git commit, 브랜치 및 병합

  1. 프로젝트 폴더를 만든다.
  2. 저장소를 만든다. (git init)
  3. 파일을 만들고 2개의 커밋을 만든다.
    work1.txt => 1
    work2.txt => 2
    work3.txt => 2
    git status
    git add FILE_NAME
    git commit -m "COMMIT MESSAGE"
  4. 시간여행을 해보세요,
    git checkout COMMIT_ID
    git checkout master
  5. 브랜치를 만들고 작업할 수 있도록 체크아웃하세요.
    git branch EXP
    git checkout exp
  6. 서로 다른 브랜치에서 작업한다.
    exp 브랜치 : exp.txt
    master 브랜치 : master.txt 커밋
  7. 병합한다.
    git merge exp
    vi editor : :wq를 이용해서 내용을 저장한다.

Day 2 / remote, push, reset

git diff - 파일 수정 후의 before / after

git commit -a -m "message" = git commit -am "message"
-a : auto adding, 자동으로 add가 된다. (tracked 상태의 파일에 대해서만)

  • add되면 안되는 파일까지 add되지 않도록 해줌
  • add가 한 번이라도 된 적이 있다면 tracked, git이 추적
    add가 한 번도 된 적이 없다면 untracked, git이 추적x

add의 3대 의미
1. commit 대기 상태를 만듦
2. untracked를 tracked로 만듦
3. 충돌을 해결했다는 것을 git에게 알려줌

gitignore

  • .gitignore 파일을 만든 후, untracked할 파일 명을 입력, 저장 후 add commit.
  • gitignore에 기록된 파일은 git status에 나타나지 않음, + add되지 않음

git reset
checkout은 head를 옮기고 reset은 head가 가리키는 branch를 옮긴다.
reset은 마지막 작업 버젼을 바꾸는 것
git reset --hard (version id)

it checkout -b 브랜치id : branch 만들고 checkout

git log --oneline --all --graph : 로그를 그래프 모양으로 보여줌

alias(전역설정) :
git config --global alias : 별명 부여
ex)
git config --global alias.l "log --oneline --all --graph"
-> git l = git log --oneline --all --graph

git reset --hard HEAD@{1} : 최근 1개 reset

원격 저장소 설정
git remote repository 생성

git remote add origin <원격 저장소 주소> : 깃 원격 저장소 연결

git remote -v : 깃 원격 저장소 연결 확인

git push --set-upstream origin master : 오리진 마스터 브랜치와 로컬 마스터 브랜치를 페어링

git push : 로컬 repo의 변동 사항을 원격 repo에 올린다

git commit --amend -m "메시지" : 마지막 version의 commit message 변경 → id도 변경

git pull <원격 저장소 주소> : 원격 repo 내용을 로컬로 가져옴. 새로운 경로에서 <주소>입력으로 다운 가능

  • pull = fetch(다운로드) + merge(병합)

Day 3 / clone, pull, rebase, flow, cherry pick

.vscode와 같은 개인설정 파일은 git -> info -> exclude에 넣어 사용
(로컬에 저장되며 git push로 올라가지 않음. ignored와 다르게 제외 정보조차 올라가지 않는다.)

config.txt.template : config의 형식을 나타냄.

ignore 자동생성 : https://www.toptal.com/developers/gitignore

생활 코딩 conflict 관련 https://www.youtube.com/watch?v=wVUnsTsRQ3g

git clone (원격 저장소 주소) (+) (현재 저장소, 생략 가능, 다른 저장 위치로 설정) : 원격 저장소를 로컬에 복제

git push -u origin(원격) master(로컬) : 원격 저장소와 페어링 후 push(u = --set-upstream)

  • 같은 이름의 branch로도 git은 원격 저장소의 branch와 지역 저장소의 branch를 서로 다른 branch로 취급한다.

git rebase : commit 조작

branch

  • branch를 적극적으로 사용해서 project를 체계적으로 관리
  • git flow / github flow 등
  • git hub flow 전략(아래)
    • master는 언제나 실행 가능하고 테스트 가능해야 한다.
    • 새로운 기능을 추가할 때는 branch를 만들어 pull-request로 merge
  • git flow 전략(아래)
    • https://techblog.woowahan.com/2553/
    • develop 브랜치로 일상 작업 / feature 브랜치로 기능 추가
    • release 브랜치로 출시 준비 (출시에 필요한 작업만 수행) develop으로 자주 합쳐라!
    • release 브랜치 작업 내용을 master 브랜치로 병합 - Tag를 만듦
    • release 작업 내용은 중요한 작업 내용이기 때문에 develop으로도 명시적 병합을 해야함
    • hotfix 긴급 수정 사항, master에서 만들어 작업 후, develop과 master로 병합
    • 참고 : https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html

git tag 태그이름 - 태그를 달 수 있음

  • head, branch = 움직이는 reference
    tag = 움직이지 않는 reference
    commit 에 이름을 붙인 것 = tag

로컬 branch를 만든 후 push --set-upstream 브랜치명
-> 원격 branch 생성 및 연결
-> master로 checkout
-> master에서 로컬 branch merge? -> merge commit 생성되지 않음 (master가 별도로 작업한 게 없기 때문)
-> fastforward (따로 merge commit 필요 없이 master가 로컬 branch와 동일 version으로 이동, 변경 사항 반영)

git merge --no-ff (브랜치명) : fastforward 못하게 하는 명령(병합을 명시하기 위해, flow 확인 수월)
git branch -d (브랜치명) - 브랜치 삭제

pull-request

  • branch를 master로 합쳐달라는 요청
    -> branch를 만든 후 원격 저장소에 push
    -> 원격 저장소에 pull request 등장 == 내가 만든 브랜치를 마스터에 병합하도록 승인 요청
  • 코드 비교, 기능
    assignees - 담당자
    reviewers - 코드 리뷰를 맡김
  • Create pull request (pull request 신청)
    conversation : 종합적인 timeline
    (* merge 되기 전의 push 변동 사항은 자동으로 업데이트된다.)
    file changed : 해당 branch에서 변경된 내용들을 보여줌
    • + 버튼을 통해 line 별로 comment를 달 수 있다(add single comment).
      start a review는 여러 파일에 걸쳐서 리뷰를 달 수 있다.
      -> finish your review로 작성 완료

병합의 두 가지 방법
- 책임 있는 사람이 Merge pull request를 누르는 방법 -> confirm merge
- local 에서 git checkout master로 가서 merge(fast-forward) 후 push
→ 1번 방법(원격 저장소 제어) 후 로컬에서 git pull -> fast-forward

서로 다른 branch에서 같은 파일을 작업, pull request
→ git 원격 저장소에서 conflict를 감지하고 그것을 알려줌
→ local에서 conflict 해결 후 push / remote에서 resolve
→ merge pull request

git config --global core.editor "code --wait" : vs code를 터미널에서 키는 명령어

git cherry-pick (원하는 version의 commit id) -> 하나의 version 만 가져오는 것, 부분 병합

rebase

  • git rebase 로컬 branch명
  • 타임라인의 복잡성을 해결

0개의 댓글