본문 바로가기

프로그래밍/Git

Git 그리고 Github란? (feat. git 기본 명령어 모음)

반응형

Git이란?

Git(Global Information Tracker)은 개발자에게 있어서 필수적인 프로그램의 버전 관리, 백업, 협업을 위한 강력한 도구이다. Git이 없다면 수천수만 줄의 코드에서 작은 수정사항을 기록하고 백업하느라 엄청난 시간을 낭비할 것이다.

Git: https://git-scm.com/

 

Github란?

버전 관리 웹 저장소이다. Git은 기본적으로 지역 저장소에 저장되는데, 지역 저장소에 기록된 버전 관리를 Github에 업로드할 수 있다. Github을 통해 백업이나 협업을 네트워크 상에서 할 수 있고 개발에 필요한 무수한 라이브러리를 활용할 수도 있다. 비슷한 플랫폼으로 gitlab이나 bitbucket 등이 있다.

Github: https://github.com/

 

 

Git CLI 명령어

# 설치확인

git

설치된 경우 usage: git...로 시작되는 문서가 출력된다. 설치가 안되어 있다면 git 공식 사이트 참조.

 

 

# 초기화

git init <directory>

Git을 사용하기 위해 먼저 사용할 디렉터리에 초기화를 해줘야 한다. 명령이 성공하면 해당 디렉터리에. git 숨김 디렉터리가 생긴다.

 

 

# 상태 확인

git status

추가되거나 변경된 파일이 있는지 상태를 확인할 수 있다.

 

 

# 변경내용 확인

git diff

변경된 파일의 세부적인 변경 내용을 확인할 수 있다. +는 추가된 라인, -는 삭제된 라인을 나타낸다.

 

 

# 변경사항 스테이지에 추가

git add <filename>
- 파일 추가

git add . 
- 현재 디렉토리 모든파일 추가

commit을 위한 변경사항을 준비하는 명령이다. 이를 통해 기록할 변경사항과 기록하지 않을 변경사항을 구분할 수 있다.

 

 

# 변경사항 커밋

git commit [-a | -m <msg>]

변경사항을 기록하는 명령어다. 주로 커밋한다라고 한다.

a 옵션은 add의 의미로 변경사항을 스테이지에 추가해준다는 의미이며 m 옵션은 해당 기록에 대한 message를 뜻한다. a와 m 옵션을 동시에 사용함으로써 변경사항을 스테이지에 추가함과 동시에 입력된 메시지와 함께 기록된다. a옵션만 사용할 경우 message를 입력할 텍스트 에디터가 실행되어 직접 입력하여야 하며, m 옵션만 사용할 경우 변경사항이 스테이지에 없다는 에러 메시지가 발생한다.

(에디터 변경 명령어: git config --global core.editor <에디터 이름(vi, nano 등)>)

단 새로 생성된 파일의 경우 git add 명령어가 선행되어야 한다.

 

 

# 최근 커밋 메시지 변경

git commit --amend

 

 

# 버전 관리 로그 보기

git log
- 현재 branch의 로그를 보여줌

git log --all
- 모든 branch의 로그를 보여줌

git log --oneline
- 각 commit를 한줄로 간략하게 보여줌

git log --graph
- 각 commit의 관계를 이미지화 하여 보여줌

git log --stat
- 각 commit의 파일단위 변경사항을 보여줌

git log -p
- 각 commit의 변경된 파일의 세부 변경사항을 보여줌

 

 

# branch 혹은 commit 된 작업으로 변경

git checkout <branch> 또는 <commit>

 

 

# 버전 되돌리기(reset)

git reset [--soft | --mixed | --hard] <commit>

입력된 commit에 해당하는 버전으로 되돌리는 명령어다. soft를 사용하면 파일의 변경사항 및 스테이지 여부까지 그대로 남는다. mixed를 사용하면 파일의 변경사항은 남지만 변경된 파일의 스테이지가 풀리게 된다. hard는 파일 변경내용 등 모두 지워지게 된다.

 

 

# 버전 되돌리기(revert)

git revert <commit>

입력된 commit에 해당하는 버전의 이전 commit으로 되돌리는 명령어다. reset은 입력된 commit으로 되돌아가며 입력된 commit 이후 기록은 제거되는 반면 revert는 입력된 commit 이전 기록을 새롭게 commit 한다.

 

revert와 reset 차이

# 현재 branch 확인

git branch

 

 

# 새로운 branch 생성

git branch <branchname>

 

 

# branch 병합

git checkout <branch to merge>
git merge <branch to be merged>

병합할 브런치에서 병합될 브런치를 향해 merge 명령어를 써주면 병합된다.

* conflict가 발생할 경우 해당 파일을 열어서 수정하면 된다.

"<<<<<<< HEAD"부터 "=======" 까지는 현재 branch에 해당하는 내용이고 이후부터  ">>>>>>> <branch to be merged>" 까지는 병합될 branch에 해당하는 내용이다. 즉, "======="의 경계선으로 위아래로 나뉘어 있으므로 원하는 내용으로 수정한 후 commit 하면 된다.

 

 

# 개별 commit의 작업 내용만을 병합

git cherry-pick <commit>

merge는 branch에 commit 된 모든 작업 리스트를 병합하는 반면 cherry-pick은 체리를 쏙 빼먹듯 한 commit만 골라서 해당 작업내용을 병합한다.

 

 

# branch의 base를 변경하여 다시 commit

git rebase <commit>

해당 commit을 base로 설정하여 다시 commit 한다. 두 갈래로 나누어져 있는 병렬 형식인 경우 선형으로 바뀌게 된다.

merge / rebase / cherry-pick

 

# 웹 원격 저장소에 연결 및 업로드(push)

git remote add <name> <url>
- url에 해당하는 원격 저장소에 연결. <name>은 주로 "origin"

git push [-u | --set-upstream] <name> <current local branchname>
- 연결된 원격 저장소에 로컬 저장소 내용을 업로드.
- 한번 업로드 된 이후에는 git push 명령어로 상기 같은 명령어의 기능을 수행함

 

 

# 지역 저장소에 원격 저장소 복제

git clone <repository>

repository는 원격 저장소의 url이다.

 

 

# 원격 저장소에서 변경된 파일 당겨오기

git pull
가져온 후 병합

git fetch
가져온 후 병합하지 않음

pull로 가져올 때 자동으로 병합하기 때문에 원격 저장소와 지역 저장소에서 같은 곳을 변경한 경우 conflict가 난다. 따라서 merge를 하기 전 확인을 먼저 하고 싶을 때 fetch를 사용할 수 있다.

 

 

 

 

반응형