Git & GitHub로 버전 관리
Git과 GitHub로 버전 관리 대략적인 과정
- Git 초기화
git init
명령어로 폴더를 Git 저장소로 초기화하면 .git 폴더가 생성된다.
- 로컬 저장소 관리
- .git 폴더에는 버전 정보와 설정이 저장된다. 한 폴더에는 하나의 로컬 저장소만 있어야 한다.
- 원격 저장소 연결 및 클론
- 기존 로컬 저장소에 원격 저장소를 연결하려면
git remote add <name> <url>
을 사용한다. git clone
명령어로 원격 저장소를 복사하면 로컬 저장소가 생성되고 .git 폴더와 원격 저장소 정보가 포함된다.
- 기존 로컬 저장소에 원격 저장소를 연결하려면
- 변경 사항 관리
- 파일을 추가(git add), 커밋(git commit), 푸시(git push)하여 로컬과 원격 저장소를 동기화한다.
Git 초기화
git init
Git 사용자 정보 등록
git 전역 사용자 설정 (GitHub의 닉네임과 이메일을 입력)
git config --global user.name "username"
git config --global user.email username@example.com
커밋 생성
- 원하는 파일만 선택하기
git add [파일]
- 메세지를 달아 커밋으로 만들기
git commit -m "메세지"
- 생성한 커밋 보기
git log
원격 저장소를 GitHub에 만들고 커밋 푸시하기
- GitHub에 로그인해서 저장소를 생성한다.
- 내 컴퓨터 폴더에 GitHub 저장소 주소를 알려준다. (원격 주소 이름: origin)
- 만든 커밋을 푸시한다.
- GitHub 사이트에서 올라간 커밋을 확인한다.
git remote add origin [저장소_주소]
git push origin main
GitHub 저장소 내 컴퓨터에 받아오기: 클론(Clone)
- 내 컴퓨터에 폴더를 만들고 GitHub의 저장소를 받아온다.
- 새 파일을 생성 후 add → commit → push
- GitHub에서 새 커밋을 확인한다.
git clone [저장소_주소] . <- 점을 찍어줘야 현재 폴더에 내려받는다. 안 찍으면 새 폴더 생성된다.
원격 저장소의 변경사항 내 컴퓨터에 받아오기: 풀(Pull)
- 내 컴퓨터 폴더에 파일 없는지 확인한다.
- 풀 명령어로 새로 올라온 커밋을 받는다.
- 새로 생긴 파일을 확인한다.
git pull origin main
사용 중인 브랜치의 이름을 모르면
HEAD
(지금 작업하는 로컬 브랜치를 가리킴)로 작성하면 된다.
브랜치
브랜치 만들기
git branch [브랜치명]
만든 브랜치로 이동하기
git switch [브랜치명]
기존에는 checkout을 사용했었다. checkout할 때는 워킹 디랙토리를 비우고 해야한다. (컨플릭트 방지)
base 브랜치와 compare 브랜치를 합치기
git merge [compare_브랜치명]
base 브랜치로 이동해서 명령해야 한다.
브랜치 vs 포크
의의 | 편리한 점 | 불편한 점 | |
---|---|---|---|
브랜치 | 하나의 원본저장소에서 분기를 나눈다. | 하나의 원본저장소에서 코드 커밋 이력을 편하게 볼 수 있다. | 다수의 사용자가 다수의 브랜치를 만들면 관리하기 힘들다. |
포크 | 여러 원격저장소를 만들어 분기를 나눈다. | 원본저장소에 영향을 미치지 않으므로 마음껏 코드를 수정할 수 있다. | 원본저장소의 이력을 보려면 따로 주소를 추가해줘야 한다. |
포크한 후 풀 리퀘스트로 머지 요청 보내기
- 포크를 하고 내용을 add하고 커밋한다.
- GitHub에서 Contribute 클릭 후 Open pull request 버튼 클릭한다.
- pull request 작성한다.
- Merge pull request 버튼 클릭한다.
풀 리퀘스트로 머지 요청 보내기
- 코드를 함께 작성하는 팀원이 있다면, 최대한 직접 머지하는 건 피하고 모든 머지를 풀 리퀘스트를 통해서 한다.
- 동료가 내 풀 리퀘스트(PR)을 보고 코드를 리뷰할 수 있다.
- 동료의 PR에 수정이 필요하면 댓글을 달아 change request를 보낼 수 있다.
- 오픈소스에 PR을 보낼때는 기여 안내문서(contribution guideline)을 반드시 참고한다.
브랜치 관리하기
- 보통
feat/기능이름
으로 한 사람이 개발하는 기능 브랜치를 만든다. (혹은fix/버그이름
,hotfix/급한버그
) - 작업이 끝나면
dev
(혹은main
) 브랜치로 PR을 보낸다. dev
브랜치에서 큼지막한 작업이 모두 머지되면release
(혹은latest
) 브랜치로 머지시키고 이를 실서버에 배포한다.- 직접 커밋은
feat
(혹은fix
,hotfix
)브랜치에만 한다. dev
나main
,release
브랜치에는 직접 커밋하지 말고 머지만 한다.
이외 여러 명령어들
amend: 깜빡하고 수정 못한 파일을 방금 만든 커밋에 추가하고 싶을 때 쓰는 명령
- 커밋 생성
- 코드 업데이트
- 기존 커밋에 amend해서 커밋 수정 & push
- 커밋 메세지만 수정
- force push(히스토리도 변경)
- vscode
- “…” 버튼을 클릭
- Commit > Commit Staged (Amend) 혹은 Commit All (Amend)
stash: 변경사항을 잠시 킵하기
- vscode
- “…” 버튼을 클릭
- Stash > Stash
- 다시 불러오고 싶다면 Stash > Pop Stash
reset: 옛날 커밋으로 브랜치를 되돌리기
- reset의 3가지 옵션
- -soft : add한 상태, staged 상태, 파일 보존
- -mixed : add하기 전 상태, unstaged 상태, 파일 보존
- -hard : add하기 전 상태, unstaged 상태, 파일 삭제
- vscode
- “…” 버튼을 클릭
- Commit > Undo Last Commit ← soft
- Staged Changes에서 취소하고 싶은 파일에서 “-”(Unstage Changes) 클릭하여 스테이징을 해제
- Changes에서 “↺”(Discard Changes) 클릭
- 터미널에서
git push -f origin main
revert: 커밋의 변경사항을 되돌리기
히스토리를 변경하지 않고 새로운 커밋을 만들어서 되돌아간다.
- sourcetree
- 히스토리에서 원하는 커밋 마우스 오른쪽 클릭
- Reverse commit 클릭
cherry-pick: 커밋 하나만 떼서 지금 브랜치에 붙이기
- sourcetree
- 다른 브랜치의 원하는 커밋 마우스 오른쪽 클릭
- Cherry Pick 클릭