상세 컨텐츠

본문 제목

git flow) 로컬, 원격 저장소 (feat. git branch BRANCH_NAME vs git checkout -b )

Git 학습 & 활용

by NayC 2022. 1. 23. 08:14

본문

728x90

 

 

 

 

핵심은, 

- master에서 작업하지 않고 develop 브랜치를 하나의 중심축으로 삼아서

  (1) 기능 수정들은 feature branch에서
  (2) 배포할 때는 realeas branch에서 버그 수정 등 배포 후 발생하는 일들을 이곳에서 해준다.  

   틈틈히 develop에 merge 

- realease branch에서 충분히 변경사항을 수정하면
   (1) master 브랜치에 merge, tag 기능을 통해서 기록

   (2) develop에도 같이 해준다. 계속 수정은 해나가야하니! 

- hotfixes는 긴급한 문제해결을 위해 따로 만든 branch (master, develop 모두에 merge)


 

test.txt 라는 파일을 만들었다고 해보자

 

1. 셋팅

(1) 내 로컬에 있는 파일을 원격 저장소와 연결

git init

git remote add origin 원격저장소 주소

// git remote -v 해서 연결 확인

(2) 커밋해보자

- test.txt 내용 수정 후 커밋

git add test.txt
git commit -am "master1"

// 버전도 붙이려면
// git tag 0.1

 

cf)

git commit -m = send log message

git commit -am = git add -a + git commit -m

 

-a option.

This basically tells Git to run git add on any file that is "tracked" - that is, any file that was in your last commit and has been modified. 

 

2. develop branch 다루기

(1) develop 브랜치 만든 후에 이동

git checkout -b develop

cf)

git branch BRANCH_NAME creates a new branch but leaves you on the same branch.

git checkout -b BRANCH_NAME creates a new branch and checks out the new branch

 

cf)

git log --decorate --all --graph --oneline

지금 내가 어디어디 브랜치에 속해 있는지를 보여줌

 

 

 

(2) develop 브랜치 내 'test.txt' 내용 수정 후 커밋

- 브랜치 구성 공부하려 이렇게 한 것이지, 일반적인 경우에는 develop에 직접 이렇게 커밋을 해주는 것보다 feature에서 접근하도록 하는게 맞는 듯

git commit -am "develop 2"

git log --decorate --all --graph --oneline -> develop2는 현재 develop 브랜치에 있는 것을 확인

 

3. feature 다루기

(1) feature 브랜치 만든 후에 이동

git checkout -b feature

나는 feature-som 대신에 feature라고 명명지어줌

 

git log --decorate --all --graph --oneline -> develop, feature 브랜치에 있는 것을 확인

 

(2) feature 브랜치 내 'test.txt' 내용 수정 후 커밋

git commit -am "feature3"

 

git log --decorate --all --graph --oneline -> feature 브랜치에 있는 것을 확인

 

4. develop에 병합하기

- 실무에서는 내가 만든 feature 브랜치 내용은 develop에서 pull request 하도록 해주기 때문에, merge 과정은 안간다고 보면 됨. 

 

(1) develop 브랜치로 이동

git checkout develop

(2) feature에서 작업해줬던 것을 merge

git merge feature

(3) feture 브랜치는 삭제해줘도 됨

git branch -d feature

 

 

 

// 여기까지가 realese 전 내용

 

출처
https://youtu.be/_kxjzlH34xc


cf) github에 많이 올리면서 익숙한 명령어로 개념을 살펴보자.

* 로컬, 리모트 개념 챙겨 *

  • 평소에는 내 PC의 로컬 저장소에서 작업하다가 작업한 내용을 공개하고 싶을 때에 원격 저장소에 업로드

 

git init을 함으로서 -> .git 이라는 로컬 저장소가 생김

  • Most other Git commands are not available outside of an initialized repository, so this is usually the first command you'll run in a new project. 
  • Executing git init creates a .git subdirectory in the current working directory, which contains all of the necessary Git metadata for the new repository. 

질문

또 궁금증. repository는 원격 저장소 아닌가? 
git init을 하면, 현재 폴더 내에 바로 '.git' 저장소가 생김을 항상 봐왔지.
아직 원격 저장소하고 연결해준 것도 아닌데, 어떻게 원격 저장소 정보들을 알아가지고는 new repository에 대한 metadata들을 가지고 와줄 수 있는거지? 

 

원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소. 
로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소. 

 

-> repository를 github에서 만든 기억 때문에 원격 저장소라고만 생각했는데ㅎㅎㅎ 아니라는거.

 

git add . 

  • Adds content to the index or staging area.

질문

index?? 

 

출처 : https://viblo.asia/p/lam-viec-co-ban-voi-git-RQqKL2zrl7z

 

staging area가 index였다. (커밋을 실행하기 전의 저장소와 작업 트리 사이에 존재하는 공간)

 

git commit -m "커밋 메시지"

  • --message=<msg> 되는지 확인해보기
  • Use the given <msg> as the commit message. If multiple -m options are given, their values are concatenated as separate paragraphs. 멀티플 해보기
  • The -m option is mutually exclusive with -c, -C, and -F. (이 옵션들과는 같이 사용 불가) 

git branch -M main

-m 

--move

  • Move/rename a branch, together with its config and reflog.

-M

  • Shortcut for --move --force.

 

질문 1

맨 처음 올려주는 것으로서 main으로 이렇게 올려주는 작업이 필요한 게 맞는 것 같은데, 왜 그동안 이 명령어를 한 번도 안했지? 

 

아마 defualt 저장소가 이미 main(혹은 master) 이기 때문

bitbucket에서는 master

 

 

질문 2

'git branch checkout 브랜치이름' 과의 차이점

 

$ git checkout -t [원격 저장소의 branch 이름] <- 원격 저장소 branch 이름과 동일한 이름의 로컬 branch를 생성하며 이동
$ git checkout -b [생성할 branch 이름] [원격 저장소의 branch 이름]

-> git branch BRANCH_NAME creates a new branch but leaves you on the same branch.

     git checkout -b BRANCH_NAME creates a new branch and checks out the new branch

 

cf) 확인 필요

-t (track)

-b (branch creation)

   

 

질문

git flow feature start [브랜치 이름] 은 feature/[브랜치 이름] 이런식으로 형성되지. 구글링을 해보니 feature는 이 형식으로 거의 만드는 것 같다. 이거 안해주고 그냥 브랜치 만들어주면 구분은 이름으로 하나? 
지금 내가 최고 헷갈려하는거. 
예를 들어 A라는 브랜치를 만들어주면, 그게 local에도 remote에도 있어야 한다고 생각하고 있어.
그래서 branch를 만들어줄 때마다 이건 local? 이건 remote? 이러면서 헷갈려 하고 있다. 

 

 

이렇게만 생각하면 된다. 
브랜치를 만들어주면 local에서 만들어주는 것임. 
- 내가 원하는 브랜치로 checkout 하면서, 거기서 push를 해주면 remote로 브랜치로 나가게 되는 것.
- 보통 실무에서는 feature에서 놀게 될 것. (develop는 pull request 이후, master는 내 권한 x) 

 

 

git remote add [원격 저장소 이름] [url]

- git remote add  origin [깃헙주소] 

  하도 이 명령어에 익숙하다보니 origin까지가 명령어인줄 착각했는데 아님. origin은 내가 명명 지어준 이름일 뿐이다. 

 

  • adding a remote directory. 즉, 리모트 저장소를 추가하는 것

 

cf) 

$ git remote 명령어 -> 현재 프로젝트에 등록된 리모트 저장소를 확인 가능

$ git remote -v -> 이름, url 함께 볼 수 있음

 

cf) 

-v (verbose, 말 수가 많은)

 

git push -u [원격 저장소 이름] [현재 브랜치] 

- git push -u origin main 

  이것도. 그동안은 다 main에서만 작업해서 이 명령어가 술술 써지는데, 만약에 내가 작업한 브랜치가 develop, 원격 저장소 이름을 abc라고 했으면 git push abc develop 이렇게 되겠지 (확인하기)  

 

cf)

-u 

-> The -u option automatically sets that upstream for you

      그래서 이 다음부터는 그냥 git push 만 적어도 되게 된다. 

 

 

 

728x90
반응형

관련글 더보기