본문 바로가기

Git

git 사용법 및 명령어 정리

Git이란?

git은 source관리를 위한 분산 버전 관리 시스템이다.

코드를 버전 관리함으로써, 배포 후 수정된 코드만을 파악할 수 있고, 하나의 프로젝트에 여러사람이 함께 작업

할 수 있도록 도와주고, 버그를 빠르게 찾을 수 있고, 프로젝트 rollback을 할 수 있게끔 도와주는점을 가지고 있다.

하지만 git은 도구이며, 어떠한 사람이 어떻게 사용하느냐에 따라 이로운 도구 해로운 도구가 될 수 있다는점을 기억 해두자.

Git 다운

일단 git을 사용하기 전에 git을 다운 받아야한다.

$ brew install git

맥은 먼저 homebrew를 다운받고 brew를 통해 git을 install할 수 있다.

이후, 터미널에서 git --version을 쳐서 git 버전이 나오면 성공적인 다운이라 할 수 있다.

다른사람의 Project git으로 받아오기

다른 사람이 짠 코드를 받고 싶거나 협업을 하는 경우 git 서버가 필요하다.

우리는 대표적으로 GitHub, Bitbucket을 사용할 수 있다.

이런 서비스를 이용하면서 다른사람의 코드를 clone하여 받아온다.

$ git clone https://github.com/.....

clone을 해서 받아오는데 뒤의 url은 해당 파일의 url주소를 넣어주면 된다.

이렇게만하면 쉽게 느껴지는데, 보통 github에 등록된 opensouce를 자주 사용한다.

그냥 clone한다기 보단 fork라는 것을 이용하여, 자신의 저장소에 복사한후 clone하여 작업하고 수정하는 경우가 많다.

이유는 opensouce에 직접 업로드할 권한이 없기때문에 github의 자신의 저장소에 복사하면, 코드를 관리할 수 있기 때문이다.



만약 본인이 가져온 opensouce에 버그를 발견해서, 이를 수정후 opensouce관리자에게 pull request를 활용해 수정사항을 전달 할 수 있고,

허락해준다면 opensouce에 기여를 하게 된다.



그리고 이미 다운 받았고 최신 내용을 git서버에서 받아와야 한다면, git pullgit fetch로 받을 수 있다.

git pull은 코드를 받아와 변경점을 merge하는 것이고, git fetch는 코드를 받아온다는 뜻이다.



그럼 둘다 받아오는데 상관없지 않나요?

아니다, 둘의 차이점은 merge를 하고 안하고의 차이가 제일 크다.

fetch의 경우 코드를 받아온 후 즉시 코드를 반영하지 않아, 작업한 코드가 충돌이 일어날 경우에 안전하지만,

pull인 경우는 코드를 받아온 후 즉시 merge하여 코드를 반영하기 때문에 충돌이 일어날 수 있다.

그러면 충돌이 나면 어떻게 해야하나?

이러한 경우는 충돌 난 부분을 해결하고 commit하면 문제가 없다.

충돌난 부분의 해결 법은 좀 있다가 다시 알아보겠다.

Branch 관리하기

내가 혼자 프로젝트를 관리한다면 해당 부분은 필요 없지만, 우리는 협업을 해야하는 경우가 굉장히 많다.

이러한 경우엔 branch를 나눠서 작업하는것이 가장 효과적이다.



branch를 생성하기 전 우리는 가장 상위 브런치인 master에 초점이 맞춰져 있다.

master기준에서 branch를 생성하려면

$ git branch branch_name
$ git checkout branch_name

위의 방식으로 branch를 생성 할 수 있다.

그리고 내가 생성한 branch에서 내 마음대로 코드 작업을 하면 된다.

그리고 충분한 테스트 이후 작업이 완료 되면 master와 합쳐야 하는데, 이때 merge 명령으로 합칠 수 있다.

그런데 master에서 작업한 내용과 branch에서 작업한 내용이 동일할때 merge한다면 충돌이 나게 될 것이다.

$ git merge master branch_name

예시를 들어 코드로 나타내어 볼 수 있다.

<<<<<<<<<<HEAD
def func(){
==========
def func1(){
>>>>>>>>>> branch_name
    print('test')
}

git은 merge하고 충돌이 나면 해당 내용을 찾아서 수정해달라고 요청한다.

HEAD영역부터 ====영역까지는 master에서 작업한 내용이고,

===내용부터 branch_name영역까지는 branch_name이라는 브랜치에서 작업한 내용이다.



HEAD부터 branch_name까지의 영역으 모두 수정하고

git add, git commit을 하면 충돌한 merge가 깨끗하게 합쳐 진다.

stash 코드를 잠깐 저장하라!

여러 사람들과 하나의 프로젝트를 쓰며 여러개의 branch를 사용하던중, 갑자기 들어온 요청이나

버그가 있어 다른 브런치로 이동해야할 일이 생기면 어떻게 할까?

그런데 내 브런치 작업은 아직 다 안끝나서 commit하기도 애매하다. 그렇다고 지우고 다시하기엔 한게 너무 많다.



그럴때 쓰는것이 git stash이다.

stash 명령어를 사용해 stash영역에 코드를 잠깐 저장해두고 다시 돌아와 작업을 이어나갈 수 있다.

해당 구조는 스택구조로 이루어져 있어 내가 저장한 코드가 제일 위에 있으면 다시 가져와 사용할 수 있다.



그러면 저장하는법은 알았는데, 가져오는건 어떻게 하나?

git stash pop로 마지막에 저장한 코드 불로올 수 있다.

그런데 시간이 너무 많이 걸려 stash영역이 기억 나지 않는다면 git stash list로 목록을 확인 해 볼 수 있다.


git 명령어 요약

  • git init : git 생성
  • git clone path : 저장소 코드 가져오기
  • git branch branch_name : 브랜치 생성
  • git checkout branch_name : 브랜치 선택
  • git checkout -b branch_name : 브랜치 선택과 동시에 생성
  • git branch -m branch_name change_branch_name : 브랜치 이름 변경
  • git branch -d branch_name : 브랜치 삭제하기
  • git add path : 수정 코드 선택
  • git add -A . : 수정 코드 전체 선택
  • git commit -m "commit_message" : 코드 수정사항 설명 작성
  • git push origin master : add - commit 다음 작업으로 git server에 보내기
  • git pull : git 서버에서 최신 코드 받아와 merge하기
  • git fetch : git 서버에서 최신 코드 받아오기
  • git stash : 작업코드 임시저장
  • git stash pop : 마지막으로 임시저장한 작업 코드 가져오기