Git workflow

Kangyeol Kim·2022년 1월 7일
0

git 구조


코드 Import & Export

다른 개발자의 코드 가져오기

# git clone [remote repository URL]
$ git clone https://github.com/javascript-tutorial/ko.javascript.info.git

현재 디렉토리에 저장소의 이름인 ko.javscript.info 디렉토리가 만들어지고 그 안에 리모트 저장소인 ko.javscript.info와 원격으로 연결되며 저장소의 데이터를 모두 가져와서 자동으로 가장 최신 버전을 checkout해 놓는다. 만약 디렉토리의 이름을 'javascript.tutorial'로 바꾸고 싶다면

$ git clone https://github.com/javascript-tutorial/ko.javascript.info.git javascript.tutorial

만약 기존의 이 과정이 이미 완료 되었고, 해당 원격 저장소에 업데이트가 발생해서 다시 최신 코드를 받아오고 싶다면, git fetch 나 git pull를 사용하면 됩니다. 사실 git pull = git fetch + git merge 이라 어느 쪽을 사용해도 상관 없습니다.

로컬 저장소 생성 및 github 연동

만약 local에서 작업한 내용을 github에 올려서 버전관리를 하고 싶다면, mywork 라는 디렉토리에 작업 내용이 있다고 하면 아래와 같이 할 수 있습니다.

# Git start
$ git init 
Initialized empty Git repository in .../mywork/.git/
$ git add .

# Github account configuration
$ git config --global user.email "xxx@gmail.com"
$ config --global user.name "kangyeolk"

# Git commit 
$ git commit -m "init"

# Git remote repository connect
git remote add origin https://github.com/xxx/mywork.git
git remote -v

# Git push 
git push origin master

여기서 갑자기 등장한 origin 과 master는 각각 리모트 저장소의 기본값 이름과 해당 저장소의 branch 기본값 이름입니다. 밑에서 설명하겠지만, git pull 로 다른 branch에서 최신 코드를 받아올시 git pull origin mybranch 처럼 다른 branch에서 코드를 받아올 수도 있습니다.

Branch 생성, 작업, 저장

코드를 가져왔으면 수정하기 전, 기존 코드를 master 에 보존하면서 따로 수정하기 위해서 다른 branch를 생성해 줍니다.

$ git checkout -b mywork

### Working...

$ git add .
$ git commit -m 'mywork done!'

작업 후에는 다시 master branc로 switch를 하고 내가 작업했던 내용을 병합을 하고, 이를 github에 반영하기 위해서 git push를 해줍니다.

$ git checkout master
$ git pull origin master
$ git merge mywork
$ git push origin master

혹시 내가 작업하는 동안 master에서 다른 코드 수정이 있었을 수도 있으므로 최신 코드를 받아온 후 merge해 주는게 좋습니다. 이 때, merge 하는 과정에서 conflict 나는 경우가 있는데, 매뉴얼리 수정하면 됩니다.

git stash의 활용

아래의 예시는 https://mylko72.gitbooks.io/git/content/_stash.html 에서 가져왔습니다. 어떤 branch에서 파일을 수정하거나 추가한 후 커밋하지 않은 상태에서 다른 branch로 checkout할 경우 아래와 같은 오류 메시지가 뜹니다.

$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
        00_topsection/css/meritz.css
Please commit your changes or stash them before you switch branches.
Aborting

단순히 커밋을 하고 나서 checkout를 하면 되긴 하지만, 아직 작업 도중이며 다른 branch에서 급하게 작업해야 할 일이 있다면, 커밋하는 것보다는 git stash 를 통해 임시로 변경 사항을 저장하고 다른 branch로 이동해서 급한 일을 처리하는 게 더 좋습니다. 그리고 일처리가 끝나면 git stash pop 를 통해서 저장내용을 복구하여 멈추었던 일을 다시 진행할 수 있습니다.

$ git stash
Saved working directory and index state WIP on feature-meritz: 629732d update css
HEAD is now at 629732d update css

### After Return

$ git stash pop
On branch feature-meritz
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   css/meritz.css
profile
Ph.D. Student @ KAIST / Co-Founder @ Letsur

0개의 댓글