Git을 사용한 버전 관리

10006 단어 복습gitgit

프로젝트를 앞두고 git 복습하기

Git 파일 생성

파일 영역의 라이프 사이클

파일의 상태 라이프 사이클

새로운 파일 생성

$ git add comment.js
  • 준비영역으로 보내기 위해 git add 명령어를 사용한다.

새로운 파일 생성 - 2

$ git add .
  • 한 번에 추가할 파일이 너무 많다면, 현재 폴더를 대상으로 지정할 수 있다.

Staging 상태 확인

$ git status
  • git status 명령어로 Staging area의 어떤 파일이 변경되었는지 등의 파일의 상태를 확인 할 수 있다.

Git 저장소 반영

Git 저장소 반영

  • comment.js 파일 작업을 staging 하였으므로 이제 무엇을 수정하고 추가했는지 메시지를 남겨 저장소에 저장하는 작업을 진행한다.

  • git commit

  • .git 저장소 내에 staging 파일 저장

저장소 반영

$ git commit -m "Initial commit"
  • 준비 영역에 있는 파일들을 저장소에 반영
  • 생략 가능하지만 반영한 내용을 추후에 쉽게 알 수 있도록 적절한 메세지 넣기

저장소 반영 내용 변경

$ git commit --amend
  • 앞에서 적은 메세지에 오타가 있거나 누락된 파일이 있을 경우 $ git commit --amend 을 이용하여 커밋을 수정할 수 있다.

  • 텍스트 편집기가 실행되고, 수정하고 싶은 부분을 수정 후 저장하면 그대로 반영된다.

저장소 반영 내역

$ git log
  • 모든 commit을 확인 할 수 있다.

Git history


Git 관리 상태 확인

  • git status

    • Staging file들의 상태 확인
  • git log

    • .git repository에 존재하는 history 확인

status

  • git diff: commit 된 파일 중 변경된 사항을 비교할때

Git history

  • git history 예시 2
  • a522b 와 f1a14 파일을 같이 저장하고 있다, 두 파일 중 백업 본이 있거나 다른 버젼으로 되돌리고 싶다면 git history를 이용하여 해당 파일을 불러 올 수 있다.

log

  • 저장소 반영 내역을 확인하기 위하여 log 명령어를 사용한다.

대표적인 log 옵션들

  • git log -p -2

    • -p, --patch : 각 commit의 수정 결과를 보여주는 diff와 같은 역할을 수행한다.
    • -n: 상위 n개의 commit만 보여 준다.
  • git log --stat

    • --stat: 어떤 파일이 commit에서 수정되고 변경되었는지, 파일 내 라인이 추가되거나 삭제되었는지 확인
  • git log --pretty=online

    • --pretty=oneline: 각 commit을 한 줄로 출력
  • git log --graph

    • --graph: commit간의 연결된 관계를 아스키 그래프로 출력한다.
  • git log -S function_name

    • -S: 코드에서 추가되거나 제거된 내용 중 특정 텍스트(function_name)가 포함되어 있는지 검사

Git 가지 치기

Git Branch

  • 독립적으로 어떤 작업을 진행하기 위한 개념
  • 각각의 Branch는 다른 Branch의 영향을 받지 않음

Git Branch 종류

  • 메인 Branch

    • 배포할 수 있는 수준의 안정적인 Branch
  • 토픽 Branch

    • 기능 추가나 버그 수정과 같은 단위 작업을 위한 Branch

Git Branch 생성

  • Branch는 아래의 명령어로 생성할 수 있다.
$ git branch like_feature

Git Branch 전환 - 1

  • 현재의 Branch는 아래의 명령어를 통해 확인할 수 있다.
$ git branch
  like_feature
* master

Git Branch 전환 - 2

  • Branch 전환은 아래의 명령어를 통해 할 수 있다.
$ git checkout like_feature
Switched to branch 'like_feature'

  • HEAD 가 가리키고 있는 것이 현재 branch

Git Navigation

  • checkout은 branch를 전환하는데 사용할 수 도 있고 아래와 같이 git log로 확인한
  • snapshot을 넘나들때도 사용이 가능하다.
git checkout <snapshot hash>

  • snapshot의 hash값을 이용하여 과거의 파일 내용을 확인 할 수 있다.

fast - forward

  • like_feature Branch의 working directory에서 새로운 정보를 넣어 commit
  • 먼저 like_feature로 위치를 이동시키기
  • git checkout like_feature

  • 현재 HEAD 포인터는 like_feature 를 가리키고 있는 상태

  • like_feature branch에서 c3이라는 새로운 체크포인트를 만든 것

Git Merge

  • like_feature Branch에서의 작업을 끝마치고, master Branch로 통합

  • 먼저 master Branch로 이동 하여 like_feature Branch를 병합

  • master를 중심으로 like_feature Branch가 병합된다.

  • c2를 가리키고 있던 master가 c3 체크포인트로 이동 like_feature 내용이 master로 병합

  • master라는 Branch가 갖고 있는 모든 내용은 like_feature가 갖고 있는 내용이 동일하다는 의미

  • like_feature Branch의 내용이 master Branch에서 업데이트 된 내용이기 때문에 곧바로

  • merge가 되는 것을 확인 할 수 있다.

  • 이렇게 merge가 이루어지는 것을 fast-forward 라고 부른다

갈라지는 branch

  • 이번에는 각각의 Branch의 working directory에서 같은 파일의 내용을 다르게 수정
  • 각각의 Branch는 다른 Branch의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.

  • git log --graph --all을 사용하면 commit graph를 확인 할 수 있다

  • --graph 옵션을 사용하여 갈라지는 것을 볼 수있다.

  • git checkout master을 이용하여 master로 checkout한 후

  • git merge like_feature로 merge 시도

  • 병합이 완료 되었다는 안내문 확인

  • masterlike_feature는 동시에 같은 체크포인트를 가리키고 있지 않다.
  • like_feature는 c3 master는 c5를 가리키고 있다.

Git Branch 삭제

  • 아래의 명령어는 Merge된 Branch를 볼 수 있다.
$ git branch --merged
  like_feature
* master
  • --merged 옵션을 줘서 병합된 Branch 확인 가능

  • 사용을 마친 branch는 git branch -d <branch name> 을 이용하여 삭제할 수 있다.

  • like_feature branch가 삭제되고 병합이 완료되고 git log 로 합쳐지는 것을 볼 수 있다.

conflict 해결

Merge conflict

  • Merge한 두 Branch에서 같은 파일을 변경했을 때 충돌이 발생한다.

  • 충돌 예시

git merge like_features 명령을 수행했을 때 아래와 같이 충돌이 발생

  • comment.js에서 충돌이 발생했다는 것을 알 수 있다.
  • 충돌이 발생하면 자동으로 병합을 할 수 없고 사용자가 직접 충돌을 해결해야 한다.

  • 같은 파일을 동시에 건드리는 바람에 git에서는 master의 파일을 사용해야 할지 like_feature의 파일을 써야 할지 고민이 되는것 그래서 conflict알림을 통해 사용자에게 어떤 파일을 쓸지 어떤 내용으로 확정이 될지 알려달라는 것

  • 이때 git status명령어로 어느 파일에서 충돌이 발생했는지 확인한다.

Git Merge 충돌 해결

  • 충돌이 일어난 comment.js파일 열어본다.

  • 위에 버젼을 쓸것인지 아래 버젼을 쓸것인지 적절히 혼합해서 쓸것인지 사용자가 직접 수정해야 한다.

  • 수정 완료 후,

  • '<<<<<<<', '=======', '>>>>>>>'가 포함된 행을 삭제해준다.

  • 수정 완료 후 git add, git commit과정을 거쳐 다시 Merge 해줘야 한다.

Git Merge 충돌 방지

  • masterBranch의 변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거해야 한다

좋은 웹페이지 즐겨찾기