Elice SW engineer - TIL day 05

Circlewee·2022년 4월 8일
0

Elice SW 2 TIL

목록 보기
4/31

why git?

  • 효율적인 협업 환경구성
  • 쉬운 버전 관리

git의 특징

  1. 가지치기와 병합: 메인 코드와 개발 중인 코드를 나누어 배포에 영향을 주지 않는다
  2. light and fast: local방식으로 코드 공유시에만 중앙 서비스에 접속하기 때문에 네트워크 속도의 영향이 적다.
  3. 분산작업에 효율적임: 개발자, 통합 관리자 등으로 나누어 역할 분담을 할 수 있다.
  4. 데이터 보장: 버전관리의 용이
  5. staging area
  6. open source

저장소 생성

  • git init: 현재 디렉토리를 git repository로 만듬
  • git init [project_name]: project_name의 directory를 만들고 git init

라이프 사이클 & command

출처) elice 강의: Git 저장소 반영부분

git add (file_name) or .
  • untracked 상태의 파일을 stage에 올린다.
  • .:은 stage에 올라가지 않은 모든 파일을 추가한다.
git commit -m "commit massage" (file_name)
git commit --amend
  • staged상태의 파일들을 git repository로 이동.
    1. -m: 뒤의 입력된 커밋 메시지 사용 옵션, file_name을 입력하면 특정 파일만 commit
    2. --amend: 커밋 메시지 수정이나 누락된 파일을 추가할 때 사용
    2-1. -m "message"를 사용하면 바로 메시지 수정가능(editer를 거치지 않음)
git status
git log [-p, --patch] [-n] / [--stat] / [--pretty=oneline] / [--graph] / [-S function_name]
git reset (file_name)
  • git status: staging file들의 상태 확인
  • git log: git repository에 존재하는 history확인(checkpoint 확인)
    1-1. -p, --patch: diff와 동일한 역할, commit의 수정 결과를 보여줌
    1-2. -n: 상위 n개의 commit만 보여줌
    2. --stat: 어떤 파일이 commit에서 수정되고 변경되었는지, 파일내 라인이 추가되거나 삭제되었는지 확인
    3. --pretty=oneline: 각 commit을 한 줄로 출력
    4. --graph: commit간의 연결된 관계를 아스키 그래프로 출력⭐⭐⭐
    5. -S function_name: 특정 텍스트(function_name)가 변경된 commit을 찾음
  • git reset: (file_name)에 해당하는 commit 삭제
    1. --soft: HEAD가 가리키는 branch를 원하는 commit으로 단순 이동
    2.--hard: soft와 동일하지만 staging된 내용, working directory에 있는 내용을 전부 해당 commit 혹은 HEAD가 가리키는 snapshot으로 돌려버림(작업내용이 보존되지 않는다.)
    3. --mixed(default): 주로 staging된 내용을 지우기 위해 사용, 기본값

git branch

  • 독립적으로 작업을 진행하기 위한 개념
  • main branch: 배포할 수 있는 수준의 안정적인 branch
    topic branch: 기능 추가나 버그 수정 같은 단위 작업을 위한 branch
git branch (branch_name)
git checkout (branch_name) / (snapshot_hash)
  • git branch (branch_name): branch_name에 적힌 이름으로 새로운 branch를 만듦
  1. git checkout (branch_name): branch_name에 해당하는 이름으로 HEAD를 이동
    1. -c: 새로운 branch를 생성 후 HEAD를 이동
  2. git checkout (snapshot_hash): snapshot_hash에 해당하는 snapshot으로 이동

git merge

git checkout master
git merge (branch_name)
git branch -d (branch_name)
  1. master branch로 HEAD를 이동
  2. 원하는 branch(branch_name)를 master branch에 merge
  3. 일반적으로 merge가 된 topic branch를 삭제
  • 꼭 master가 아니어도 어떤 branch1에서 branch2로 merge할 때 사용
  • branch1에서 master로 바로 merge를 시도해도 된다.
  • merge의 여러 경우
    1. master branch의 변경이 없는 경우: master branch에 merge 대상의 변경사항을 적용하고 merge대상이 가리키는 checkpoint로 master branch를 이동
    2. master branch에도 변경이 있는 경우: 위와 같이 merge대상의 변경사항을 적용하고 새로운 checkpoint를 가리킴. 단, merge대상의 checkpoint는 변하지 않기 때문에 서로 다른 checkpoint를 가리킴

git log --graph --oneline --all을 사용해 branch status를 한 눈에 쉽게 확인할 수 있다.

git merge conflict

  • merge한 두 branch에서 같은 파일의 변경이 일어나면 충돌이 발생함
  1. 이때 git status명령어로 충돌이 일어나는 곳을 확인할 수 있음
  2. 충돌이 일어난 곳을 수정한 후 git add git commit과정을 거친 다음 다시 merge

원격 저장소

  • git clone: 원격 저장소에 올라가 있는 repository를 복사하는 명령어(단순 복사, 이 상태의 repo는 로컬)
  • git remote add origin (repo link): repo link의 원격 저장소와 연결, origin은 원격 저장소의 이름
    • -v: 지정한 저장소의 이름과 주소를 확인할 수 있음
  • git remote show origin: origin이라는 원격 저장소의 정보를 확인
  • git remote rename (before) (after): 원격 저장소의 이름을 before에서 after로 변경

pull & fetch / push

  • git pull origin master: 원격 저장소의 변경점을 자신의 로컬 저장소로 받아오는 데 사용. fetch와는 다르게 자동으로 merge가 된다.
  • git fetch origin master: 이것을 사용하면 반드시 merge를 진행해 줘야한다.
    git merge origin/master
  • git push origin master: 로컬 저장소에서 작업한 내용을 원격 저장소에 반영. 단 다른 사람이 먼저 push를 했고 그것을 merge하지 않은 상태라면 먼저 merge를 진행해야한다.
profile
공부할 게 너무 많아요

0개의 댓글

관련 채용 정보