2025.04.24
Git에서 독립적으로 작업을 진행할 수 있는 분리된 공간
Git 저장소 내에서 특정 시점의 커밋을 가리키는 이름이 붙은 포인터
git branch : 현재 브랜치 목록 확인
git branch feature/브랜치명 : 새 브랜치 생성
git checkout feature/브랜치명 : 기존 특정 브랜치로 전환
git checkout -b feature/브랜치명 : 새 브랜치를 생성하고 해당 브랜치로 전환
git merge feature/브랜치명 : 다른 브랜치를 현재 브랜치에 병합
git branch -d feature/브랜치명 : 로컬에서 특정 브랜치를 삭제
git push origin --delete feature/브랜치명 : 원격 저장소에서 특정 브랜치를 삭제
git config --global init.defaultBranch main : 새로 생성되는 git저장소의 기본 브랜치 이름을 설정
git branch -M main : 현재 저장소의 특정 브랜치를 다른 이름으로 변경
<!-- Switch 명령어 사용법 -->
git switch feature/브랜치명 : 기존 브랜치로 전환
git switch -c feature/브랜치명 : 새 브랜치를 생성하고 해당 브랜치로 전환
git switch : 오직 브랜치 전환만을 목적으로 사용되며, 더 직관적이고 명확
git checkout : 브랜치 전환뿐만 아니라 파일 복구 등 다양한 용도로 사용
새 브랜치 생성
상태변경
git status : 상태확인
git add . : 모든 파일을 staging area에 추가
git commit -m "커밋 메시지" : staging area에서 local area로 이동
git log : 현재 진행된 로그 확인
- git log --all --graph --oneline : 브랜치 흐름을 간단히 시각화
병합(Merge)
git checkout main : main으로 이동
git pull origin main : 최신 상태로 갱신
git merge feature/브랜치명 : 병합
병합 후 정리
git branch -d feature/브랜치명 : 로컬에서 삭제
git push origin --delete feature/브랜치명 : 원격 저장소에서 브랜치 삭제
병합 대상 브랜치가 현재 브랜치에서 직선으로 이어져 있을 경우
두 브랜치 간 변경 사항이 충돌하거나 서로 다른 변경 기록이 있을 경우, 공통 조상(merge base)을 기준으로 병합

<<<<<<< HEAD
main 브랜치의 코드
=======
feature 브랜치의 코드
>>>>>>> feature

git reset : 모든 스테이지된 파일 언스테이징
git reset 파일명.확장자 : 해당 파일만 언스테이징
git reset --soft HEAD^ : 커밋을 취소하고 스테이징 상태 유지
git commit --amend -m "수정할 커밋메시지" : 직전 commit 메시지 수정
먼저 해당 커밋으로 리베이스
git rebase -i : 커밋 내역 조회
- --interactive, -i 옵션을 주면 커밋 목록을 텍스트 편집기로 열어 수정 가능
<커밋내역>
pick 381cd2a 코드 품질 개선
pick f772ba1 테스트ㅌ 코드 추가
pick 2ad65fe 하단 버튼 추가
pick 381cd2a 코드 품질 개선
edit f772ba1 테스트 코드 추가
pick 2ad65fe 하단 버튼 추가
git commit --amend -m "커밋 메시지"
git rebase --continue
git rebase --abort : 리베이스 중단
git push origin 브랜치명 --force : 과거 커밋 이력 변경
먼저 커밋 해시 코드 확인
git reflog : HEAD 이동 내역 및 커밋 해시 조회
git reset --mixed 해시코드 : reset의 기본 옵션, 작업 디렉토리는 그대로 유지, 헤드와 인덱스 변경
git reset --hard 해시코드 : 작업 디렉토리, 헤드, 인덱스 모두 변경
git reset -- soft 해시 코드 : 헤드만 변경(스테이징 상태 유지)
git reflog : 커밋 로그 확인
git rever 해시코드3...해시코드1 : 되돌리고 싶은 커밋의 범위를 지정한다.
Revert "되돌리고 싶은 커밋 메시지"
git push origin master : 변경 사항 원격 반영
git rm --cashed 파일명.확장자 : 인덱스에서만 파일 삭제, 로컬 저장소의 파일은 지우지 않는다.
git filter-branch -f --index-filter "git rm --cached --ignore-unmatch 파일명.확장자" HEAD : 모든 커밋에서 아무런 내용이 없는 빈 커밋
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch 파일명.확장자" --prune-empty --tag-name-filter cat -- --all
git filter-branch -f --prune-empty HEAD : 모든 히스토리에서 빈 커밋을 제거
git push -f origin master : 모든 커밋 푸시
git fetch origin : 원격 저장소의 최신 커밋들을 로컬 저장소로 가져온다.
git checkout 브랜치명 : 브랜치 이동
git merge origin/브랜치명 : 병합
git pull origin 브랜치명
원격 저장소와 로컬 저장소 모두 새로운 커밋을 가지고 있으면 논 패스트 포워드(Non fast-forward) 발생
git pull --rebase : 리베이스 병합
git remote add upstream https://github.com/원본저장소/프로젝트.git
git remote --verbose : 원격 저장소 목록
origin https://github.com/내계정/프로젝트.git
upstream https://github.com/원본계정/프로젝트.git
git fetch upstream
git checkout master
git merge upstream/master
git stash : 작업 디렉토리 헤드로 이동
git checkout 브랜치명 : 다른 브랜치로 이동
git stash pop : 백업한 내용 되돌리기
git stash save 설명 : 설명 붙여서 백업
git stash list : 목록 확인
git stash pop stash@{아이디} : 특정 백업 복원
git stash apply stash@{1}
main → featA → featB 구조에서,
featA는 이미 Squash and Merge 방식으로 main에 merge되었고,
featB만 따로 PR 보내고 싶은 상황
git checkout featB
git rebase --onto master featA
- git rebase --onto [새 베이스] [제거할 부모] [브랜치]
git push -f origin featB
git pull origin master
git add .
git merge --comtinue
git push origin 브랜치명
Merge branch 'master' of https://github.com/원격 저장소/브랜치명 : 병합 커밋 메시지
git checkout 브랜치명
git pull --rebase origin master
git add .
git rebase --continue : 리베이스 계속 진행
git push -f origin 브랜치명
브랜치 a의 파일을 복사해서 브랜치 b로 옮긴다.
git checkout featA
git reflog
- git log
git checkout featB
git cherry-pick a의 변경할 파일의 해시코드
git branch -m 기존이름 새이름
git push origin :기존이름 # 기존 브랜치 삭제
git push origin 새이름 # 새 브랜치 푸시
git push origin -u 새이름 # 추적 설정까지
.gitconfig 파일에서 alias를 설정
vim ~/.gitconfig : 설정 파일 열기
[alias]
축약형 = 축약할 명령
[alias]
co = checkout
br = branch
ci = commit
st = status
lg = log --oneline --graph --decorate --all
프로젝트를 진행하면서 발생하는 다양한 이벤트들을 의미
발견된 버그나 추가할 기능, 개발해야 할 새로운 이슈나 설계사항들을 이슈로 만들어서 동료들과 협업을 진행
Settings → Issues에서 이슈 템플릿을 설정할 수 있다.
템플릿을 통해 작성 형식을 팀에서 통일할 수 있다




Template content 직접 수정해서 원하는 형식으로 고정 가능


이슈 템플릿을 정하면 이슈를 정할 때 원하는 형식으로 나오게 된다.
해당 이슈 또는 Pull Request(Pull 요청)에 대해 책임지고 처리할 담당자

다양한 종류의 이슈 중 각 이슈가 어떤 종류, 상태, 우선순위 등을 구별하기 위한 것

스프린트 개발 방법론을 지원하기 위한 기능





작업 현황과 진행도를 볼 수 있는 메뉴






코드 변경 사항을 특정 브랜치(main 등)에 병합해 달라고 요청하는 기능






이슈나 PR에 이벤트 기반 자동 작업 설정 가능 (GitHub Actions 활용)