[Github] 기본 사용법

Infinity-blue·2023년 10월 10일
0

모든 프로젝트를 혼자 진행하다 보니 Git을 사용할 필요성을 못 느껴서 로컬 PC 에
여러 버전을 저장하곤 하였다. 그러나, 불필요하게 PC 저장공간을 차지하기도 하고
팀 프로젝트나 오픈소스에 기여할려면 Github 공부가 반드시 필요하다고 느껴졌다. 기본적인 사용법은 다음과 같다. 브랜치는 기본으로 설정되어 있는 'main'을 사용했다.

리포지토리를 처음 만들 경우

1. 로컬 리포지토리를 만들 폴더에 터미널로 접속해서 다음을 입력한다.**

git init

2. 깃헙 프로필에서 1번의 폴더와 연동할 리포지토리를 만들고 (만들 시 기본적인 .gitignore, README.md도 자동생성되게 한다) 주소를 복사한다.


3. 2번과 연동하기 위하여 터미널에 다음을 입력한다.

git remote add origin <2번에서 복사한 깃헙 프로필 리포지토리 주소>
텍스트

4. 2번에서 만든 파일에 대한 정보를(변경사항) 받아온다.

git fetch origin

5. 2번에서 발생한 변경사항을 로컬 리포지토리에 입력 및 동기화한다.

git merge origin/main

보통 fetch 및 merge 대신 pull를 많이 사용하지만 pull를 사용할 시 오류가 너무 자주 발생하였다. 대안책으로 merge를 사용하면 오류가 없다. 위의 merge대신 rebase를 해도된다. 'merge'대신 'rebase'를 입력하면 된다. 깃헙의 기본 작동방식인 merge에 익숙하기에 merge를 택했다.

만약 로컬 리포지토리에 변경사항(파일 수정, 추가, 삭제 등)이 전혀 없었다면 이대로 끝내면 된다. 하지만 난 2번에서 만든 파일들 외에도 로컬 리포지토리에서 파일수정을 하였기에 아래의 단계가 불가피했다. 로컬 리포지토리에서의 수정사항을 리모트 저장소 (편의 상 리포지토리를 리포 및 저장소라고 하겠다)에 푸쉬 즉, 동기화해야 하기 때문이다.

6. 로컬 저장소의 수정 된 코드를 리모트 저장소에 푸쉬.

git add .
git commit -m "your commit message here" (변경사항 내용)
git push origin main

로컬과 리모트 저장소의 동기화가 요류없이 완료되었다. 위의 단계를 모두 완료한 이후 추후 로컬 저장소만 수정을 하고 리모트는 수정된 사항이 없을 때 6번만 로컬 저장소에서 시행하면 끝이다.
이 경우가 아닌, 리모트와 로컬 저장소를 둘 다 수정하게 될 시 다음을 실행한다.



생성 및 동기화 되어있는 로컬/리모트 저장소를 수정했을 경우

위의 4번을 실행한 후 다음을 터미널에 입력한다.

git stash

'stash' 없이 git add와 commit및 merge를 하게 되면 5번을 실행 시 merge오류가 발생한다. git은 리모트와 로컬 저장소의 코드가 동일하다는 전제하에 작동하기 때문이다. stash는 로컬 저장소의 변경사항을 바로 적용하지 않고 보류하여 따로 저장해둔다. 위의 명령어를 입력하면 git status 에 출력되어 있었던 변경사항이 사라진다. stash로 임시저장 하였기 때문이다.


그 다음, 위의 5번을 입력한다. 5번을 입력한 다음, 다음을 입력한다. stash에 따로 저장했던 변경사항을 다시 가져오는 명령어다. 변경사항이 적용된다. git status를 입력하면 변경사항이 다시 보이는 걸 확인할 수 있다.

git stash pop

다음으로, 위의 git add 부터 git push 코드까지 입력한다. 리모트 저장소의 수정내용은 로컬에 머지가 되고 로컬의 수정내용은 리모트 저장소에 푸쉬가 완료된다.
앞서 말했듯이 로컬과 리모트 저장소의 커밋 진행현황이 같아야 리모트 저장소로 푸쉬가 가능하니 반드시 리모트 저장소의 변경내용을 우선적으로 머지한 뒤 푸쉬를 해야한다. 다음의 명령어를 터미널에 입력하면 커밋 진행 현황을 알 수 있다. 두 저장소의 커밋현황을 비교해보면 두 저장소가 동기화가 잘 되고 있는지 알 수 있다.

로컬 저장소 커밋 진행현황

git log --oneline

리모트 저장소 커밋 진행현황

git log --oneline origin/main

0개의 댓글