Git 플로우
1. 최초 작업 시
[ Github 프로젝트에 올린 기능추가용 Issue번호가 #40번 일 때로 가정 = Feat/#40_1 ]
1. Git 설정
$ git config --global user.name "이름 성"
$ git config --global user.email "이메일"
2. 팀 (혹은 개인) 레포지토리 Clone
$ git clone origin main 레포지토리에서_복사한_URL_경로
$ git pull origin main
$ git switch -c Feat/#40_1
$ git push origin Feat/#40_1
특정 원격 브랜치를 클론받는 방법
git clone -b {branch_name} --single-branch {저장소 URL}
ex) git clone -b dev --single-branch git@github.com:codestates-seb/seb40_main_030.git
2. PR단계
[ 현재 브랜치 상태 : Feat/#40_1 라고 가정]
$ git commit -m "Feat: 컨벤션에_맞게_문구_작성"
혹은 commit은 인텔리제이 좌측상단 commit 탭에서 선택해서 진행
(.idea 파일이랑 build.gradle파일은 커밋하지 않습니다. 혹은 .gitignore에 설정해두기)
$ git push origin Feat/#40_1
깃허브에서 PR진행
3. PR끝난 후
[ 새로 작업할 수정 작업을 위한 Issue번호가 #50번이라 가정, Feat/#50_1 ]
Github레포지토리에서 원격 Feat/#40_1 브랜치 제거
$ git switch main
$ git branch -D Feat/#40_1
$ git pull origin main
$ git switch -c Fix/#50_1
4. 용어 설명
Feat/#숫자_숫자 의미 : Feature디렉토리를 생성해서 숫자_숫자에 해당하는 브랜치를 만듦
ex) 기능추가 작업을 하기위한 3번 브랜치 개설 : Feat/#3
ex) 문서작성 작업을 하기위한 5번 브랜치 개설하나, 추가 브랜치 늘릴 가능성있음 : Docs/#5_1
ex) Feat/#61_1 으로 브랜치 추가 했을 때, 로컬 Git 브랜치 상태

5. 개인 작업 브랜치 git branch strategy flow
- 이미지 참고 링크 : https://radpro.tistory.com/422
/* 개인 작업 Git flow */
1. 원격에서 Issue를 만든다 ⇒ 이슈번호 생성 (예시 : feat#1 )
2. 이슈번호에 맞게 fe / be에서 브랜치를 만든다 (예시 : fe → feat#1)
3. 로컬에서 아래 명령어로 원격 브랜치 상태를 동기화 한다
$ git remote update -p
4. 로컬에서 아래 명령어로 만든 브랜치를 가져온다
$ git switch (해당 브랜치명) (예 : $ git switch feat#1 )
5. 로컬에서 작업 후 원격으로 푸쉬한다
6. 원격에서 PR생성 후 Squash merge로 선택하여 merge한다
7. merge 후 바로 보이는 보라색 `Delete branch` 버튼으로 개인 브랜치를 삭제한다
8. 다시 새로운 이슈 생성 후 해당 이슈번호로 다시 fe/be에서 브랜치를 생성한다
9. 로컬에서 fe/be로 돌아가 pull하고, 기존 개인 브랜치는 삭제한다
$ git switch fe` ⇒ $ git pull origin fe ⇒ $ git branch -D feat#1
10. 다시 원격과 동기화 시키고, 새 브랜치를 받아서 작업한다
$ git remote update -p ⇒ $ git switch fix#2
기타 명령어
Git branch
브랜치 생성 / 변경
새 브랜치 생성 및 HEAD 변경 (둘 중 아무거나 해도됨)
$ git switch -c 새브랜치
$ git checkout -c 새브랜치
기존 브랜치로 HEAD 변경 (둘 중 아무거나 해도됨)
$ git switch 기존브랜치
$ git checkout 기존브랜치
브랜치 확인
$ git branch
브랜치 합치기 (dev로 Feat/#60_1 브랜치 내용 merge)
$ git switch dev
$ git merge Feat/#60_1
브랜치 삭제 (merge가 완료되면 브랜치 삭제권장)
1. 원격 브랜치 삭제 : PR 후 Delete branch 클릭
2. 로컬 브랜치 삭제 :
$ git branch -d 작업한브랜치
merge안한 로컬 브랜치 삭제 (보통 이거씀)
$ git branch -D 작업한브랜치
* 원격(github 레포지토리 main에 PR되어있다면, 로컬은 강제로 지워도 상관없는 구조)
로컬 MERGING 상태해제
$ git merge --quit
원격 - 로컬 브랜치 간 코드비교
$ git fetch --All
원격 내용 로컬에 덮어쓰기
git reset --hard origin/원격브랜치명
Git Clone 후 원격 레포 구조 가져오기
git clone (레포주소)
git branch -r
git remote update
git switch (원하는 원격 레포 브랜치)
git pull origin (해당 브랜치)
로컬 상태 되돌리기 기능
1. Git pull 되돌리기 (그대로 사용하면 됨)
git reset --hard ORIG_HEAD
2. Git merge 되돌리기 (그대로 사용하면 됨)
git reset --merge ORIG_HEAD
3. Git commit 되돌리기
1) 작업 내역 삭제하고 돌아가는 명령어 [롤백 및 미래시점 삭제] : <이전 커밋번호여섯자리>로 리셋
$ git reset <이전 커밋번호여섯자리>
2) 작업 내역 돌아올수 있는 명령어 [롤백 및 미래시점 저장됨] : <현재 커밋번호여섯자리> 에서 이전으로 되돌아가기
$ git revert <현재 커밋번호여섯자리>
3) 기타 옵션
# commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존
$ git reset HEAD^
$ git reset HEAD~1 # 마지막 commit을 취소. 하나를 되돌림
$ git reset HEAD^^
$ git reset HEAD~2
// 커밋 아예 삭제 + 작업내역 롤백
$ git reset --hard HEAD^
// 특정 커밋 상태로 돌아가기
# git reset 커밋번호여섯자리 --hard
$ git reset a6f30a --hard
4. Git add 되돌리기
$ git restore --staged 파일명
$ git restore --staged 파일명
Git 레포지토리 관리
1. 깃 레포지토리 합치기
: 서브트리로 관리하는 방법 ( 즉, 합치고자 하는 Repo의 Branch의 하위 디렉토리를 끌어와 저장하는 법)
1) 정리해놓을 새 Repository를 만든다. (혹은 기존 Repo사용 가능)
2) 해당 Repository를 로컬에 클론한다. (기존에 클론한 프로젝트가 있다면 생략가능)
3) 해당 레포지토리에 들어간다. 이 때, 만약 처음 클론한 상태라면 add 및 commit을 한번 해준다.
git add .
git commit -m "원하는 메세지"
4) 저장할 Branch명으로 로컬 브랜치를 새로 하나 판다.
git switch -c (브랜치명)
5) 아래의 명령어로 정리할 Repo의 Branch 내 디렉토리를 끌어온다.
git subtree add --prefix=(해당 Repository 하위의 디렉터리명) (옮겨올 Repository 주소) (옮겨올 Repository의 branch)
6) 끌어온 디렉토리를 원격 레포지토리에 push한다.
'Git > Git' 카테고리의 다른 글
| [Git] git branch workflow (0) | 2022.11.10 |
|---|---|
| [Git] PR 리뷰 팀원 제한 걸기 (0) | 2022.11.10 |
| [GitHub] TOTP 딜레마 해결 (0) | 2022.10.06 |
| [Git] Git 최초 설정 (사용자 정보등록 / 설정확인 / 편집기 변경) (0) | 2022.10.01 |