git 기초 (강의s 내용 정리)

Junghyun Park·2020년 12월 24일
0

유투브 엘리코딩 영상

강의영상 링크: https://www.youtube.com/watch?v=Z9dvM7qgN9s

기본 용어 및 개념

  • git
    : 코드의 버전관리를 위한 tool
    : 새로 변경된 부분이외는 이전 내용을 참조하는 형식으로 아주 적은 data만 사용

  • workflow
    : "working directory"에서 작업을 어느정도 되면, "staging area"에 옮겨두고, commit 명령어를 통해 git directory로 보낸 후, pull과 push를 통해 진행

  • commit
    : 각 시점에서 코드의 스냅샷
    : 각 commit에는 고유의 hash code가 부여되어 있음
    : 또한, messeage, author, date/time 정보도 함께 포함

  • push
    : local git directory를 remote 환경으로 upload 하는 것

  • pull
    : remote 환경(server)에서 local로 download 하는 것

기본 명령어 및 초기 세팅

  • git config --list
    : 모든 git 환경설정내용 확인

  • git config --global -e
    :에디터에서 config 내용을 확인하고 싶을 때

  • code .
    : 코드 에디터로 직접 연결(VSC로 연결했음)

  • git config core.editor "code --wait"
    : config 파일을 지정된 에디터로 열고, 관련 수행 종료 전까지는 터미널 작동 멈춤

  • git config --global core.autocrlf input
    : 윈도우와 맥에서 줄 바꿈을 의미하는 값이 다른데, git에 업로드 및 다운로드하는 과정에서 줄바꿈 오류를 없애기 위하여, 자동으로 변환되도록 설정하기 위함

  • git init : git 초기화, 자동으로 master branch 생성

  • git status: 현재 상태확인

  • git add
    : git이 tracking 하면서 staging area로 옮기기

  • .gitignore
    : traking 하고 싶지 않은, git과 git hub에 올리고 싶지 않은 파일은 gitignore 파일에 넣어서 처리 할수 있음(ex> log 파일)

  • git diff
    : 파일 비교

  • git log
    : commit 정보 기록 보기

Learn Git Branching

학습 사이트 : https://learngitbranching.js.org/?locale=ko

  • git commit
    : Git 저장소에 여러분의 디렉토리에 있는 모든 파일에 대한 스냅샷을 기록하는 것

  • git branch "브랜치 명"
    : 새로운 branch 생성

  • git checkout "브랜치 명"
    : 현재 위치 branch 이동

  • git merge "브랜치 명"
    : Git의 합치기(merge)는 두 개의 부모(parent)를 가리키는 특별한 커밋을 만들어 냄
    : 지정한 브랜치를 현재의 브랜치와 merge한 새로운 commit 생성 (merge하고자 하는 대상이 현재 위치의 commit 보다 하위의 경우, 새로운 commit생성이 아닌 하위 commit에 병합됨)

  • git rebase "브랜치 명"
    : 커밋들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것
    : 커밋들의 흐름을 보기 좋게 한 줄로 만들 수 있음
    : (동일 준위의 브랜치 간)지정한 브랜치의 하위 commit으로 이동 (이전 commit은 없어지지 않고 남아 있음)
    : 상위 브랜치에서 하위 브랜치로 rebase 실행하면, 하위 브랜치 위치로 합쳐짐

HEAD
: 현재 체크아웃된 커밋 = 현재 작업중인 커밋 (= 상대적인 브랜치 명)
: 일반적으로 HEAD는 브랜치의 이름을 가리키고 있음(bugFix와 같이) 커밋을 하게 되면, bugFix의 상태가 바뀌고 이 변경은 HEAD를 통해서 확인가능
: git commit "commit고유 해시값(id)"하게 되면, branch의 고유값을 가리키지 않고 HEAD가 분리되어 존재함

상대참조
:일반적으로 commit간 이동 시, commit의 해시값으로 이동하는 것은 매우 불편하므로 상대참조 개념이 도움
: 가장 일반적으로는 branch를 옮길때 사용
*'^(캐럿 연산자)' : 부모로 이동 (여러개 연속 사용 가능)
*'~(틸트 연산자)숫자' : 이어서 기재된 숫자만큼 위로 이동

  • git branch -f '재지정하고자하는 브랜치명' '위치(절대 or 상대 참조)'
    :-f 옵션을 이용해서 브랜치를 특정 커밋에 직접적으로 재지정 할 수 있음

변경사항 되돌리기

  • git reset 되돌아갈 위치
    : 브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌림. 이런 관점에서 "히스토리를 고쳐쓴다"라고 말할 수 있음
    : 즉, git reset은 마치 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것임
    : add 명령 이전의 staging area에서 working directory 위치로 이동 명령
  • git revert 되돌아갈 위치
    : 각자의 컴퓨터에서 작업하는 로컬 브랜치의 경우 리셋(reset)을 잘 쓸 수 있습니다만, "히스토리를 고쳐쓴다"는 점 때문에 다른 사람이 작업하는 리모트 브랜치에는 쓸 수 없음
    : 변경분을 되돌리고, 이 되돌린 내용을 다른 사람들과 공유하기 위해서는, git revert를 써야함
  • git cherry-pick commit1 commit2..
    :현재 위치(HEAD) 아래에 있는 일련의 커밋들에 대한 복사본을 만들겠다는 의미
    : 현재 위치(HEAD)의 브랜치 하위에 commit 기재 순서에 따라 하위 브랜치로 붙이겠다는 의미

interactive Rebase
: 위의 cherry-pick와 달리 commit의 명칭을 잘 모르는 경우에 사용
: rebase 명령어 사용시 -i 옵션을 사용함을 의미
: git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄움. 각 커밋을 구분할 수 있는 각각의 해시들과 메시지도 보여줌
:드래그 & 드롭도 가능하고, pick 토글 버튼으로 원하지 않는 commit은 뺄 수 있음
: git rebase -i '최종 목적지 위치'

git documentation 공식사이트

Git의 동작 원리 [Git으로 시작하는 협업 및 오픈소스 프로젝트] - 유투브 동빈나

사이트: https://www.youtube.com/playlist?list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81

  • git pull
    : git fetch와 git merge를 한꺼번에 수행가능하도록 함
    : 협업 중인 remote repo의 코드를 local 데이터와 동기화하려는 경우 자주 사용

  • pull request(PR) in github
    : 해당 프로젝트에 대한 참여 권한이 없는 경우라도, github의 pull request를 통해 open source에 기여할 수 있음
    : 여러 개발자가 협업 시에도 최종 master에 merge 전에 컨펌 절차를 통해 merge 여부를 결정하도록 하기 위해 활용 가능

  • git commit --amend
    : commit을 완료했는데, 완료된 commit에 미처 포함시키지 못한 내용이 있다면, --amend 옵션을 통해 수정 가능

  • remote 저장소와 local 저장소의 소스 코드 내용이 달라졌을 때(예를 들어, reset등을 통하여 과거 commit으로 돌아가거나, 협업 중 push 전에 누군가 remote 코드를 수정한 후 master에 다른 branch를 merge하려고 하는 경우), push가 안되는 오류 발생함
    => 이러한 경우에는 git push -f를 통해 강제로 push할 수 도 있고, remote의 코드를 pull 한 다음 다시 commit, push 하여 해결해야 함
    => conflict(충돌) 하는 경우, 해당 파일 내에 다른 부분이 각각 표시되는데, 여기서 하나로 수정한 후, 다시 commit, merge 하면 해결 가능
    https://youtu.be/yRjc6mmRol4?list=PLRx0vPvlEmdD5FLIdwTM4mKBgyjv4no81&t=264

  • git remote add 저장소명 URL주소
    : 새로운 remote repo를 생성
    : remote show 저장소명(저장소 정보 보기), remote remove 저장소명(저장소 삭제), remote -v(저장소 리스트 정보 보기), remote rename oldname newname(저장소명 변경)

  • git log
    : commit에 대한 정보, history를 확인

  • README.md 파일
    : 코드에 대한 소개, 사용 방법등을 기재
    : md는 markdown의 약자로서, 이 형식에 의해 github페이지 내에서 바로 작성 및 업로드 가능 (velog와 거의 동일)

  • git archive --format=zip master -o MASTER.zip
    : archive 명령을 통해, git 폴더(메타데이터 등 포함)을 제외한 소스코드 파일만 압축할 수 있음

  • git rebase -i HEAD~3
    : 현재 commit 위치로부터 위로 3개까지 interactive 창을 띄워 수정
    : 과거의 특정 커밋을 찾아 정보를 변경하거나, 커밋 간 순서를 변경하거나, 삭제 등 모든 commit 수정을 자유로이 할 수 있는 굉장히 유용한 기능

profile
21c Carpenter

0개의 댓글