핵심은,
- 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) 내 로컬에 있는 파일을 원격 저장소와 연결
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.
(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 브랜치에 있는 것을 확인
(1) feature 브랜치 만든 후에 이동
git checkout -b feature
git log --decorate --all --graph --oneline -> develop, feature 브랜치에 있는 것을 확인
(2) feature 브랜치 내 'test.txt' 내용 수정 후 커밋
git commit -am "feature3"
git log --decorate --all --graph --oneline -> feature 브랜치에 있는 것을 확인
- 실무에서는 내가 만든 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
* 로컬, 리모트 개념 챙겨 *
git init을 함으로서 -> .git 이라는 로컬 저장소가 생김
질문
또 궁금증. repository는 원격 저장소 아닌가?
git init을 하면, 현재 폴더 내에 바로 '.git' 저장소가 생김을 항상 봐왔지.
아직 원격 저장소하고 연결해준 것도 아닌데, 어떻게 원격 저장소 정보들을 알아가지고는 new repository에 대한 metadata들을 가지고 와줄 수 있는거지?
답
원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소.
로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소.
-> repository를 github에서 만든 기억 때문에 원격 저장소라고만 생각했는데ㅎㅎㅎ 아니라는거.
git add .
질문
index??
답
staging area가 index였다. (커밋을 실행하기 전의 저장소와 작업 트리 사이에 존재하는 공간)
git commit -m "커밋 메시지"
git branch -M main
-m
--move
-M
질문 1
맨 처음 올려주는 것으로서 main으로 이렇게 올려주는 작업이 필요한 게 맞는 것 같은데, 왜 그동안 이 명령어를 한 번도 안했지?
답
아마 defualt 저장소가 이미 main(혹은 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은 내가 명명 지어준 이름일 뿐이다.
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 만 적어도 되게 된다.
한 번에 여러 브랜치들을 작업할 때 (0) | 2022.04.13 |
---|---|
develop에 대해 잘못 생각했던거 (0) | 2022.03.17 |
Git 개념 (github과 이클립스 연결) (1) | 2021.04.04 |
Git 개념 (reset, revert, branch, merge, rebase) (0) | 2021.04.04 |