Git을 사용한 버전 관리
프로젝트를 앞두고 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 시도
- 병합이 완료 되었다는 안내문 확인
master
와like_feature
는 동시에 같은 체크포인트를 가리키고 있지 않다.like_feature
는 c3master
는 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 충돌 방지
master
Branch의 변화를 지속적으로 가져와서 충돌이 발생하는 부분을 제거해야 한다
Author And Source
이 문제에 관하여(Git을 사용한 버전 관리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sza0203/Git을-사용한-버전-관리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)