Git, github 사용법 정리

허션·2025년 9월 5일
0
post-thumbnail

git이란?

코드 파일이 변경해 온 역사를 기록해둘 수 있는, 버전 관리 시스템.

  • git init : 로컬 폴더 위치를 git으로 관리할 수 있게끔 git에 경로를 등록하여, 해당 폴더를 git local repository로 만든다. 폴더 내에 .git 폴더가 생성되며, 폴더 내 모든 변경사항이 .git내에 기록된다.
    (새로 파일을 만들 때, 즉 첫 initialization 단계에서만 실행하면 된다.)
    (repository - 한 프로젝트의 파일과 버전 이력을 관리하는 공간으로, .git 폴더 등 로컬 환경에 있는 저장소를 local repository, github과 같이 온라인 서버에 있는 저장소를 remote repository라 한다.)

변경사항 git에 기록하기 (local)

  • git add : git system이 파일 변경을 추적할 수 있게 파일을 ‘등록’한다.
  • git commit : 파일 변경 사항을 기록해 둔다.
    • commit : 변경 사항을 저장할 수 있는 가장 작은 단위이다. 각 commit마다 구체적인 변경 사항이(어느 줄이 어떻게 바뀌었는지) 표시되어 쉽게 기록할 수 있다.
    • git commit -m “message” : message에 무엇을 바꾸었는지 간략하게 설명을 작성할 수 있다.

변경사항 git에 기록하기 (remote)

위의 git init, git add와 git commit이 로컬 git 저장소에 변경사항을 기록하는 방법이라면, Github과 같은 온라인 서버에 원격 저장소를 만들기 위해서는 git remotegit push 를 이용할 수 있다.

  • git remote add origin [https://github.com/nickname/repository-name.git](https://github.com/nickname/repository-name.git) : 로컬 저장소 위치를 원격저장소인 github repository와 연결시킨다.

  • git push {원격저장소} {branch} : 명시한 원격저장소의 branch에 commit 내역을 “push”, 즉 저장한다. (git addgit commit 이후 실행)

    • ex. git push -u origin master :
    • -u 옵션 : --set-upstream 과 같은 뜻으로, 앞서 명시해준 원격저장소(origin)의 master branch와 해당 로컬 저장소 사이에 연결관계를 형성함.
      git push 만으로도 연결관계를 형성한 원격저장소에 push 가능.

explanatory image

			(waffle studio 23.5 OT)

branch :

  • ‘평행세계의 코드’라고 볼 수 있다. 원본 코드 파일들이 있는 main에서, 복사본인 branch들을 만들고 그곳에서 원본 코드에 영향을 주지 않으며 코드를 작성할 수 있다. 이후 main의 코드와 합칠 수 있다. → 코드의 원본 파일을 영향주지 않으면서 코드 작성을 하고 싶을때 이용할 수 있다.
    • branch 만들기 : git branch <branch-name>

    • branch로 이동 : git switch <branch-name>

    • branch의 코드를 main과 합침 : git merge <from-branch>

      또한 협업 시, 여러 사람이 서로 다른 작업을 할 때 하나의 공동 작업공간 (organization repository)에서 각각 branch를 만들어 독립적인 작업 영역을 만들고 이후 작업이 완료되면 main으로 merge한다.

      ⇒ 공동 repository에서 개인 branch를 복사하는 것을 repository를 ‘fork’한다고 하며, 그리고 merge 이전에 공동작업자들에게 코드 변경 사항에 대한 확인을 보내는 것을 ‘Pull Request’ 즉 PR이라 한다.

  • fork repository : 외부 서버에 있는 repository를 내 repository로 복사해오는 것이라 볼 수 있다.

pull request 만들기:

  • 오픈소스 프로젝트와 같이 외부 공개된 public repository에 있는 코드에 수정사항을 남기고 commit할 경우에는, 외부 repository를 내 repository로 fork해온 후 해당 repository를 로컬 저장소로 가져와준다. (clone , pull ) (fork는 외부 repository에 대한 나만의 branch를 생성하는 거라 할 수 있다.) 이후 해당 로컬 저장소에서 파일을 수정한 후, commit 및 push한 후 원본 repository에서 pull request를 생성할 수 있다.
  • pull request, 즉 PR은 자신이 fork를 통해 만든 branch를 외부 repository에 merge(=수정, 즉 commit내역을 승인)하기 전에 이를 확인 받기 위한 과정이다.
    pull request 원본 repository의 소유자는 pull request를 확인하고 이를 승인/거절할 수 있다.
    ```bash
    cd file/location/
    git clone https://github.com/nickname/repo-name.git
    git pull
    ```

정리

    local repository 
    -- | commit, push | -->git server 
    —- | pull request | --> 외부 git server
    외부 git server 
    -- | fork | -->git repository
    --> | clone | -->local repository

예시

  • local 저장소에 있던 gift-card-maker을 local repository로, git에 경로 등록하기
         ~/projects                       
        ❯ cd gift-card-maker
        ❯ git init
        Initialized empty Git repository in /Users/seoyeonheo/projects/gift-card-maker/.git/
  • git add, commit :
git add images
        ❯ git add index.html
        ❯ git add main.js
        ❯ git commit -m "initial commit"
  • github repository 연결
        git remote add origin https://github.com/h-seo-n/card-maker.git
        git branch -M main
        git push -u origin main

변경사항 push & commit 과정

README.md 업데이트 등 원격저장소(github)에 수정이 있었을 때, 원격저장소의 데이터를 git pull로 로컬 저장소인 git에 최신화한 후 commit 해야 함.

→ 그렇지 않을 시 충돌 발생, pull 후 병합된 내용을 push하게 됨.

  • 수정 사항을 git add 로 스테이지에 추가
    • 모든 파일 추가 : git add .
    • 특정 파일 추가 : git add main.js
  • git 상태 확인 : git status
  • 커밋하기 : git commit -m "changes saved"
  • 로컬 저장소의 커밋을 원격 저장소로 올리기 : git push

reset : 실수로 한 add/commit/push취소하기

  • add unstaging : commit 전, stage에 파일을 잘못 add 한 경우 git reset <파일 경로 or 파일명> 으로 해당 파일을 stage에서 제거할 수 있다.
  • push 전 commit 취소 :
    • commit을 취소하지만 stage에는 남겨놓기 (add한 상태) : git reset --soft HEAD^
    • commit을 취소하고 stage에서도 제거 : git reset --mixed HEAD^ == git reset HEAD^
    • 여러 개의 commit 취소 : ex. git reset HEAD~{개수}
    • 원격 저장소 & 로컬 작업 공간 모두에서 commit 내역 삭제하기 : git reset --hard HEAD^
  • push 취소 :
    • 가장 최근 커밋 취소 : ****git reset HEAD^
    • 특정 커밋 취소하기 : git reset {commit id} → reset 후 git commit -m "message" 입력 및 git push {repository} {branch} -f 로 강제 push를 해주면 원격저장소로 push된 커밋까지 취소할 수 있다.

Github repository에서 파일 삭제하기

깃헙에 개의치 않게 테스트 코드 등의 파일을 잘못 올렸을때 git rm을 이용해서 github에서만 파일을 삭제할 수 있다. (로컬 저장소에는 유지)

 git rm --cached filename.code 
 git commit -m "remove filename.code"

--cached를 지우고 커맨드 실행 시 로컬 저장소에서도 삭제된다.

(깃헙 공식 웹에서는 웹 gui에서 삭제하는 방법이 안내되어 있으나 현재는 그 방법이 없어진 것으로 보임)

profile
다시해보자.

0개의 댓글