본문 바로가기

Git

[Git] Git 입문하기 / git의 모든 것 - init, add, commit , push, pull, fetch, status, log, blame :: DANIDANI

Git 이란?

분산 버전 관리 시스템(형상 관리 도구) 중 하나

형상관리가 버전관리, 변경 관리를 모두 포함하는 개념

 

형상?

소프트웨어 개발 산출물(문서나 코드)이 배치되어 있는 형태

형상 관리?

소프트웨어의 변경사항을 체계적으로 관리하는 것

프로젝트의 생명 주기 동안 제품의 무결성과 변경에 대한 추적성 을 확보하기 위한 활동

 


Git 명령어 사용법

git init

.git이라는 숨겨진 폴더 생긴다.

.git은 저장소이고 모든 변경 내용을 저장한다.

 

working directory - 현재 작업을 하고 있는 영역, 소스 코드를 변경하고 있는 곳.

staging area - 깃의 파일 변경 내역을 저장하는데 스테이징이라는 단계 거침.

repository(.git directory) - 최종적으로 Git의 저장소에 반영이 되는 곳.

 

즉, git add를 하면 내가 작업하고 있는 영역에서 staging 되어 임시 영역에 저장이 되었다가

git commit을 하면 그때 git의 저장소에 반영이 되는 것이다.

 


 

git status

파일의 상태를 확인 할 수 있다.

  • nothing to commit, working directory clean - 파일은 하나도 수정하지 않았음
  • Untracked files - add 하기 전의 새로 만들어진 파일
  • Changes to be committed - add는 했는데 commit은 안한 파일
  • Changes not staged for commit - 기존에 add가 되어있던 파일인데 수정이 이뤄짐. add를 다시 해야 됨 
git add . 
git add test.js 
git add *.js

저장하려는 파일을 스테이징에 추가한다.

 

git commit 
git commit -m "커밋 메시지 작성"

commit은 폴더 내용 저장하는 단위!

commit을 하기 전에는 반드시 스테이지 상태에 두어야 한다.(= add를 꼭 해줘야 한다)

커밋은 내 컴퓨터에 저장된 .git 에 저장을 하는 것이고, 아직 원격 저장소에는 반영이 안 된 상태이다.

 

git commit --amend 
git commit --amend -m "커밋 메시지 작성"
  1. 마지막 커밋 메시지 수정 가능!

  2. 이전 커밋에 변경사항 추가

    'A 기능 완성' 이라고 커밋을 했는데, 아차! 코드 한 줄이 잘 못되었다. 다시 커밋을 하면 'A 기능 완성', 'A 기능 수정' 이 될텐데 합쳐서 한 번에 'A 기능 완성'이라고 하고싶을 때!!!!!

git log

커밋의 해쉬값(고유의 커밋 ID), 작성자, 작성일자, 커밋 메시지등 확인 가능

 

 


로컬 저장소 — push —> 원격 저장소

git push (저장소명) (브랜치명)

git push (저장소명) (브랜치명)

push는 로컬 저장소에 저장된 이력들을 원격 저장소에 올리는 명령

저장소명은 git remote로 알아낼 수 있다. 보통은 origin

 

git push -u (저장소명) (브랜치명) git push

매번 같은 저장소명과 브랜치 명을 치기 귀찮다면?

처음 push에서는 -u 옵션을 사용하고,

다음 부터는 그냥 git push만 사용해도 된다.

 


로컬 저장소 <— pull — 원격 저장소

git pull (저장소명) (브랜치명)

원격 저장소에 업데이트된 파일이 있을 때, pull을 이용하여 원격 저장소에서 로컬 저장소로 변경된 파일을 가져 온다.

 

git fetch

git pull은 원격 저장소에서 변경 내역을 가져와서 병합까지 하고,

git fetch는 변경 내역만 가져오고 병합은 직접 해야한다.

 

fetch를 사용하는 이유는 pull과 다르게 병합 전 로컬과 원격 저장소 내용을 비교해 볼 수 있고(git diff HEAD origin master),

commit의 히스토리를 알 수 있다.(git log —decorate —all —oneline)

fetch이후에는 merge를 통해 병합해주면 된다.

즉, git fetch + git merge = git push

 

 


번외 - 이 코드 누가 작성했어???????😠😡

git blame -L (시작 줄번호),(끝줄 번호) (대상 파일)

blame은 소스 코드 라인 단위로 누가 수정 했는지 추적하는 명령이다.

 

 

728x90