사전에 ID/PW 캐싱데이터를 삭제하고 진행하는 것이 좋습니다. 회사 git 계정과 개인 git 계정이 다른 경우에(또는 다른 사람 계정과) 원하지 않는 충돌이 생길 수 있기 때문입니다.
캐싱데이터는 말그대로 계정 정보 저장을 위한 임시공간이기 때문에 지워도 문제가 되지 않습니다. 앞으로 계속 진행하게 될 계정으로 업데이트 해주면 됩니다.
캐싱데이터 삭제 및 업데이트
git config --global --unset credential.helper
git config --system --unset credential.helper
git config --global user.email "email@example.com"
git config --global user.name "name"
git 저장소의 장점 중 하나는 branch를 만들어 현재 프로젝트와 똑같은 환경을 복제하여 기존 path, 폴더 setting, 모든 files 을 유지하면서 기존 폴더와 다른 환경에서
Testing 이 가능하다는 점입니다.
따라서, 협업 시 맡은 부분만 작업하기 위해서 또는 개인의 프로젝트 물을 다른 환경에서 테스트해보고 싶을 때 등에 적용하는 branch & merge 작업을 살펴보겠습니다.
branch의 생성, 삭제, 비교, merge
# branch 생성 후 자동으로 브랜치 변경
git checkout -b "branch_name"
# 기존의 브랜치에서 -> master 이동
git checkout master
git branch -d "branch_name"
git branch --list
git checkout -b "test/add"
git touch example.txt
# git diff or git status로 현재 환경에서의 변화 확인
git diff
git status
# master 브랜치로 넘어가서 현재 환경에서의 변화를 보고
# test/add 브랜치와 다른 것 확인하기
git checkout master
git diff
git status
# 현재 text/add, master 브랜치가 존재하는 윗단계와 같은 환경이라 가정
# master 브랜치로 바꿔준 후 원하는 브랜치를 merge 해준다.
# merge 작업시 각 브랜치에 같은 파일을 수정했을 경우 충돌이 발생한다.
# 충돌이 발생한 파일의 충돌을 해결해준 후 git add -> git merge 작업
git checkout master
git merge text/add # text/add -> branch 명
일단 원하는 오픈소스 작업이나 팀프로젝트의 repositary를 fork해오면,
fork해온 원 저장소는 = upstream
fork해 생성한 본인의 저장소는 = origin
으로 구분이 됩니다(명칭은 바꿀 수 있지만, 통상적으로 저렇게 많이 사용합니다).
그런데, 보통 upstream 저장소의 push 권한은 소수의 사람에게만 허용이 되어 있기때문에 수정사안을 pull request 게시판으로 보내, 허용된 부분에 대해서만 merge가 이루어집니다.
pull request로 보낸다고 다 merge 되는 것은 아니며, 보통은 reject 당할 때, 해당 게시물에 comment가 달리니 이유나 수정사항에 대해 충분히 토의하고 재도전하다보면 merge가 되어 contributer가 될 수 있습니다.
git add -> git commit -> git push origin [branch] -> PR
위와 같은 순서로 진행됩니다.
pull request는 본인의 저장소에 push를 진행하면, pull request 버튼이 활성화 된다. 이를 누르고 title, message를 작성하면 됩니다.
# git add로 staging된 내용을 잠시 다른 곳에 임시저장한다.
git stash
# 저장해두었던 사항을 꺼낸다.
git stash pop
# 특정폴더 기준으로, 이전 커밋 상태로 복구시킨다.
git checkout -- [directory]
# 현재 remote 저장소 기준의 최신상태로 복구시킨다.
git reset --hard origin/master
git reset [staged file]
# 고유 커밋 해시 아이디로 삭제
git reset --hard "commit ID"
# HEAD~(num) -> num은 HEAD에서부터 몇번째인지를 뜻한다.
# HEAD가 가리키는 것은 최신커밋이다.
git reset --hard HEAD~1
# -s : signed-off-by Author licence 표시가 생긴다
# -m : commit title 메세지 작성
git commit -sm "message"
# 현재의 stage 내용이 새로운 commit 선언없이 기존 commit 변경사항에 반영된다.
# 기본으로 설정한 text editor가 실행되어, commit 내용을 수정할 수 있다.
git commit --amend