git&github

Github 사용하기

몽자비루 2025. 10. 14. 22:48

0. Github이란?

Github란 무엇일까? Github는 코드 공유 및 협업 서비스이다.

Github 외에도 GitLab, Bitbucket등의 동종 서비스가 많지만 대중적으론 Github을 가장 많이 쓰인다.

 

특히 Git으로 관리하는 모든 프로젝트들을 온라인 공간에 공유하여

프로젝트 구성원들이 함께 소프트웨어를 만들어낼 수 있도록 도와주는 서비스이다.

 

온라인 Git 저장소는 모든 업로드와 다운로드를 Commit 단위로 주고받는다.

따라서 다른 사람이 완료한 작업을 Github에 등록하기 위해서는 반드시 최신버전을

Local환경에 다운로드 받도록 강제되기 때문에 충돌을 방지할 수 있다.

 

또한 Github는 오픈소스의 성지라고도 불리는데, 전 세계에서 굉장히 많은 오픈소스 프로젝트들이

Github에서 공유되고 참여하고 있을 뿐 아니라 나만의 오픈소스를 만들 수도 있다.

1. Github 시작하기

Github 를 본격적으로 사용하기 앞서서 Github에 push 와 pull을 할 수 있도록 계정을 설정해야 한다.

 

먼저 github에 가입한 뒤 Personal access token을 만들어야 한다.

 

원래는 github id/pw 입력을 통해 github에 업로드/다운로드가 가능했지만,

최근에는 더욱 안전한 방식을 위해 github 비밀번호를 따로 생성한 뒤에 컴퓨터에 설정한다.

 

Settings - Developer settings 에서 tokens(classic) - Generate new toke(classic) 에서 토큰을 생성하는데,

이때 권한과 만료 기간을 설정해줄 수 있고, 생성된 비밀번호는 따로 저장해야 한다.

이 토큰을 매번 설정하기 귀찮기 때문에 컴퓨터에 저장하기 위해서는 windows 기준으로

"자격 증명 관리자"를 검색한 뒤 Window 자격 증명 - git:https://github.com 자격 정보를 생성한다.

 

이후 github의 사용자명을 입력한 뒤에 위에서 생성한 토큰 비밀번호를 입력하고 저장하면 된다.

맥은 해당 링크에서 보여주는 mac guideline 을 따라서 keychain이 비밀번호를 설정해주면 된다.

 

추가로 소스트리에 계정 추가는 도구-옵션 에서 인증에서 github.com 을 입력히줌면 된다.

마지막으로 Github repository를 설정할 건데, Github 홈에서 Create repository를 선택하고

프로젝트명을 입력한 뒤에 Public 혹은 Private를 선택할 수 있도록 선택할 수 있다.

 

이 두가지 차이는 Public은 모두에게 보여줄 수 있는 반면, Private는 원하는 사람에게 공개할 수 있다.

추가로 repository를 다른 사람에게 공유하기 위해서는 repository의 Settings - Collaborators 에서

Add people로 협업자의 id 나 email 을 등록하여 프로젝트에 접속할 수 있게 만들 수 있다.

2. 원격 저장소 연결하기

Github 와 연동하면 프로젝트 코드 뿐 아니라 Git으로 관리되는 모든 내역이 Github에 올라가게 된다.

 

먼저 github 홈에 접속하면 아래와 같이 내용이 노출되는데, 위에는 처음 repository와 연동할 때 사용되고,

아래는 local 환경에서 이미 관리되고 있는 Git이 있는 경우,  Github에 해당 내용을 올릴 수 있다.

 

나는 기존에 관리하던 Git이 있기 때문에 아래에 있는 명령어를 그대로 복사해서 붙여넣었는데,

명령어를 하나하나 뜯어보자면 git remote add origin "Github link" 를 입력하면

origin이라는 이름의 저장소에 원격 저장소 주소를 연동한다.

 

이후 git branch -M main 은 기본 브랜치명을 main 으로 설정하고,

git push -u origin main 은 로컬 저장소의 커밋 내역들을 원격으로 push하는 명령어인데

-u 는 현재 브랜치와 명시된 원격 브랜치의 연결을 default 로 설정한다는 의미이다.

 

두번째로 Github 에서 프로젝트를 다운로드받을 수 있는데, 여기에 두가지 방법이 있다.

 

먼저 repository 우측 상단 code 드롭리스트에서 Download ZIP 을 눌러

코드를 다운로드받을 수 있는데, 다만 .git 파일은 다운로드되지 않기 때문에 git 관리내역은 없다.

 

따라서 협업할 때에는 다운로드하고자 하는 폴더로 이동한 상태에서 Git bash 를 연다.

이후 git clone "repository URL" 을 입력하면 현재 포커싱된 폴더 하위에 프로젝트가 다운로드 된다.

3. Push 와 Pull

이제 본격적으로 원격 저장소에 push와 pull 을 통해서 관리를 진행해볼 예정이다.

 

먼저 로컬 파일 수정 상태에서 git commit 을 진행하면 local의 Git 에 commit 이 추가되는데,

sourcetree 에서 확인하면 아래와 같이 local 은 추가되지만 원격 저장소는 이전 commit 에서 멈춰있다.

 

이후에 git push를 하면 원격 저장소와 local 저장소가 동일한 위치로 이동되는 것을 볼 수 있다.

 

만약 위에서 git push -u origin main 중 -u 를 넣지 않았다면, git push origin main 으로 입력해야 한다.

 

그렇다면 이번엔 git pull를 진행해볼 예정인데 이 git pull 은 다른 사용자가 한 작업을

Github 으로부터 내 컴퓨터에 있는 프로젝트 폴더로 다운로드 받는다.

 

여기서 또다른 문제가 있는데, push  하기 전에 pull을 해야 하는 내용이 있다면 어떻게 될까?

그 결과는 아래처럼 reject 되는데, 그 이유는 현재 Git 저장소는 원격 저장소보다 뒤쳐저 있기 때문이다.

 

따라서 원격 저장소에 push를 하기 위해서는 git pull로 저장소 최신 상태로 맞춰야 한다.

 

이때 두가지 방법, no-rebase 와 rebase 방식이 있는데 먼저 git pull --no-rebase 명령어를 입력하면

local 의 main branch 와 원격의 main branch 를 다르게 판단하고 merge시키게 된다.

 

두번째로 git pull --rebase 는 내 로컬 커밋을 원격의 최신 커밋 뒤에 재정렬하는 방식이다.

 

마지막으로 이전에 branch에서 했듯이, git pull을 했을 때, local 에서 commit 한 내용과

원격 저장소에서 commit 한 내용이 충돌이 나는 경우 어떻게 해결할 수 있을까?

 

no-rebase 를 하는 경우, 이렇게 바로 충돌 내용 중 하나를 선택할 수 있도록 화면에 노출된다.

여기서 하나를 선택한 뒤에 혹인 모두 수정한 뒤에 git add + commit 을 진행하면 충돌을 해결할 수 있다.

 

그렇다면 여기서 rebase 방식을 체택한다면 어떻게 될까?

여기서 중요한 점은 rebase는 "원격의 최신 커밋 뒤에 로컬의 커밋을 재정렬하는 방식" 이다.

 

즉, 충돌이 나는 부분에 대해서 수정한 뒤 git add + git rebase --continue 를 진행해야 한다.

 

예를 들어서 원격에서 text = remote 이고 로컬에서 text = local 이라고 했을 때 충돌 상황에서

text = remote 를 먼저 선택한다면, remote 버전을 불러온 뒤 변경사항이 없으므로 commit이 추가되지 않는다.

 

반대로 text = local 을 먼저 선택한다면, 원격의 commit 과 로컬의 commit 이 달라졌으므로

원격의 commit 의 내용을 먼저 쌓고 그 뒤에 local의 commit 을 재정렬하여 commit 이 새로 만들어진다.

 

간혹 충돌과 git이 너무 꼬여있어서 풀기 어려운 경우가 있는데, 이럴 때 강제로 push하는 방법도 있다.

 

명령어는 아래와 같이 git reset + commit hash 를 통해서 이전의 상태로 복구한 다음에

git push --force를 입력하면 Githb에 있는 commit 도 reset 할 수 있다.

4. Github의 branch를 관리하기

그렇다면 만약, git branch 가 있는 상태에서 push를 진행하면 어떻게 나타날까?

결과는 아래와 같이 어떤 branch에 push 해야할 지 모르기 때문에 실패하게 된다.

 

따라서 git push -u origin "branch name" 을 입력하면 대상 branch를 정한 뒤 push 한다.

Github에서도 branch가 생성되고 git branch --all 을 통해 local과 remote 의 모든 branch 를 확인 가능하다..

 

그럼 여기서 원격의 branch를 local에 받아오려면 어떻게 해야할까?

 

먼저 local에 없는 remote branch가 있는 생타에서 git branch -a 를 실행시키면

아직 원격의  branch가 노출되지 않는데, 이 상태에서 git fetch를 통해 원격 변경사항을 확인한 뒤

git branch -a 를 실행하면 Github 에서 생성된 branch를 확인할 수 있다.

 

이후 git switch -t origin/remote_branch 명령어로 원격 브랜치를 추적하는 새 로컬 브랜치를 만든다.

즉, local환경에 remote_branch 를 만든 뒤 해당 branch와 remote 의 remote_branch를 연결한다.

 

그래서 아래와 같이 확인했을 때, local 환경에 remote_branch가 생성되어 있는것을 볼 수 있다.

 

그렇다면 원격 브랜치를 지우는 방법은 무엇일까?

 

local의 branch를 지우는 방법은 git branch -d "branch name" 인 반면,

remote 의 branch를 지우는 방법은 git push "remote name" --delete "branch name" 이다.

 

4. Github의 branch

마지막으로 위 과정 중 sourcetree 로 GUI를 통해 진행해보려고 한다.

가장 먼저 원격 저장소를 연결하는 방법은 저장소 - 원격 저장소 추가 후 이름과 경로를 입력한다.

 

그리고 원격 저장소에 push 하는 방법은 먼저 상단 목록 중 커밋 버튼을 눌러 변경사항을 저장하고

push 버튼을 누른 뒤에 저장소 위치를 변경하고 branch 를 변경한 뒤에 push 한다.

 

반대로 pull 을 하는 방법도 동일하다 원격 저장소에 변경사항이 있는 경우,

Pull을 누른 뒤에 저장소 위치를 지정하고 pull을 누르면 local 저장소로 불러온다.

 

remote branch를 추가하는 방법은 먼저 상단에 브랜치 버튼을 눌러 local branch를 추가한다.

 

이후 Push 버튼을 누르고 저장소 위치를 결정한 뒤 푸시할 로컬 브랜치 체크박스를 활성화하면

리모트 브랜치 입력레이아웃이 활성화 되는데, 이때 이름을 입력한 뒤 Push를 누른다.

 

마지막으로 remote branch를 local 로 가져오는 방법은 상단에 패치 버튼을 눌러 원격 저장소에서 메타데이터를 가져온다.

이후 해당 원격 branch를 우클릭한 뒤에 체크아웃 버튼을 누르면 새 브랜체 치크아웃이 나온다.

 

그 다음에 새 로컬 브랜치명을 추가하고 확인 버튼을 누르면 완료된다.

 

이렇게 기본적인 Github 사용방법과 Sourcetree 사용방법까지 쭉 알아봤는데,

이정도만 알아도 협업에서 기본적인 Git을 사용하는 데 무리는 없지만,

좀더 이해도를 높이기 위해 Git에 대해 조금 더 자세한 내용을 작성해보려고 한다.