관리 메뉴

공부 기록장 💻

[Git] Git 명령어 정리 (Git Commands) 본문

# Tech Studies/Git • Github

[Git] Git 명령어 정리 (Git Commands)

dream_for 2023. 2. 14. 18:53


Git 이란?

Git형상 관리 도구(Configuration Management Tool) 또는 버전 관리 시스템(Version Control) 중 하나로, 소프트웨어를 개발하는 기업의 핵심 자산인 소스 코드를 효과적으로 관리할 수 있게 해준다.
  • 많은 기업이 SVN에서 Git으로 갈아타고 있는데, Git은 분산형 관리 시스템으로 중앙 서버에서 소스코드와 히스토리를 저장하는 SVN과 달리, Git은 소스 코드를 여러 개발 PC와 저장소에 분산해서 저장한다.
  • 즉 사본을 로컬에서 관리하기 때문에, 속도가 매우 빠르고 중앙 서버에 장애가 발생해도 로컬 저장소에서 commit 할 수 있으며, 로컬 저장소의 복원도 가능하다.


Git의 장점

  • 소스코드를 주고 받을 필요 없이, 여러 명이 동시에 작업하는 병렬 개발이 가능하다.
  • 즉 `브랜치`를 통해 개발한 뒤, 본 프로그램에 합치는 방식(`Merge`)으로 개발을 진행한다.
  • 분산 버전 관리이므로 인터넷이 연결되지 않는 곳에서도 개발 진행이 가능하며, 중앙 저장소가 날라가도 다시 원상 복구가 가능하다.



Git, Github의 차이점

Git: 형상 관리 도구(버전 관리 시스템)

  • 프로젝트의 소스 코드를 USB나 메일로 주고 받지 않고, 형상 관리 도구 Git을 통해 변경 사항을 쉽게 되돌릴 수 있고, 두 버전의 소스코드를 비교하는 일이 가능하다.

Github: 형상 관리 도구(버전 관리) 웹 호스팅 서비스

  • 협업하고 있는 코드를 저장할 서버의 역할을 한다.
  • 버전 관리 시스템을 지원하는 웹호스팅 기능을 통해, push, pull, request와 같은 이벤트에 반응하여 자동으로 작업(배포 등)을 실행할 수 있게 한다.

용어들

  • Repository : 저장소로, history, tag, source의 branch 에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 내역을 확인할 수 있다.
  • Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점
  • Staging Area : 저장소에 커밋하기 이전 커밋을 준비하는 위치
  • Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하여, 저장소에 작업하는 작업
  • Head : 현재 작업중인 Branch
  • Branch : 가지, 분기점을 의미하며, 작업할 때 현재 상태를 복사하여 Branch에서 각 기능별 작업을 한 뒤 완전하다 싶은 경우 Merge를 통해 작업 사항을 통합한다.
  • Merge : 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다.



Git commands


1. git --version

  • Git 설치 및 버전 확인하기

2. git clone https://github.com/linkkk

  • Github과 같은 remote repository에 존재하는 소스 코드를 다운받는 명령어
  • 여기서 `remote` 이란 `local` 의 반대로, 모든 팀 구성원들이 각자의 코드 변경 사항을 교환하기 위해 사용하는 repository의 특성을 말한다.
  • 해당 repository의 가장 최신의 버전을 똑같이 복사하여 로컬 컴퓨터에 저장하여 작업을 시작할 수 있다.


3. Branch 관련 명령어

  • ` Branch` 는 여러 개발자들이 동시에 프로젝트를 병행적으로 작업할 수 있도록 돕는다. branch를 생성하고, 나열하고, 삭제하는데 `git branch` 명령어를 사용할 수 있다.
  • `git branch new-branch-name` : 로컬에서 새로운 브랜치를 생성
  • `git push -u <remote> <branch_name>` : remote repository에 새 브랜치를 push
  • `git branch`, `git branch --list` : 브랜치 목록 확인


4. Git checkout

  • `git checkout <my-branch-name>` : 다른 브랜치에서 my-branch-name 브랜치로 변경.
  • 브랜치를 전환하는데 필요한 단계들이 있다:
  • 현재 브랜치에 있는 변경 사항들은 remote repo에 commit을 하거나 숨겨야 한다.
  • 변경하고자 하는 브랜치가 로컬에 존재해야 한다.
  • `git checkout -b <my-branch-name>` : 로컬에 새로운 브랜치를 만들고 바로 전환하기


5. git status

  • 현재 브랜치에 대한 아래의 내용을 비롯한 모든 필수적인 정보들을 제공해줌
  • 현재 브랜치가 update 되어 있는지
  • commit하거나 push, pull 해야할 사항이 있는지
  • 업로드되거나, 업로드되지 않은, 추적되지 않는 파일들이 있는지
  • 파일들이 새로 생성되거나, 수정, 삭제 되었는지


6. Git add

  • 로컬에서 파일을 생성, 수정, 삭제하여 생긴 변경 사항들을 다음 commit에 반영함
  • `git add <file-name>` : 하나의 파일 추가
  • `git add .`, `git add -A` : 모든 파일을 한번에 추가


7. Git commit

  • 로컬 환경의 개발 프로세스에서 변경 사항들을 저장하는 일종의 checkpoint를 설정하는 것. 필요한 경우 다시 되돌리는 것도 가능
  • `git commit -m "커밋 메세지"` : 소스 코드의 변경 사항에 대한 메세지 추가 가능


8. Git push

  • 변경 사항들을 commit 한 이후, remote server에 전송. commit들을 remote repository에 밀어 넣는 명령어
  • `git push <remote> <branch-name>` : 현재 branch-name 에서 작업한 사항들을 remote 에 적용
  • `git push --set-upstream <remote> <branch-name>`, `git push -u origin <branch-name>`: 새로 생성한 브랜치의 경우 브랜치도 함께 업로드하여 적용하기


9. Git pull

  • `git pull <remote>` : remote 레포지토리에서 변경사항을 내 로컬로 가져오기
  • `git fetch` 와 `git merge` 이 합쳐진 것으로, remote repo에서 변경 사항들을 가져오고(git fetch), 로컬의 최신 사항에 즉각적으로 적용하는(git merge) 것을 의미한다.



10. Git revert

  • 만든 변경사항들을 다시 되돌려야 하는 경우 사용
  • `git log --oneline` : commit history를 보기
  • `git revert 332413` : 332413이라는 해시 코드 값을 갖는 commit 사항으로 되돌아가기 위함. 이전의 commit history를 지우지 않고, 이전으로 되돌아가기 위한 새로운 commit을 만듬



11. Git merge

  • 로컬 브랜치에서 개발을 마치고 모든 작업들이 완성되면, 부모 브랜치(dev 또는 master, main) 브랜치로 통합이 되어야 함. 즉 그동안 만들었던 모든 commit 사항을 다시 dev(master, main) 브랜치로 옮기는 것이다.
  • merge를 하기 위해서는 로컬의 dev 브랜치를 최신 버전으로 업데이트해야 할 필요가 있다.
  • `git checkout dev` : 먼저 dev 브랜치로 전환하고
  • `git fetch` : merge 전, 로컬 dev 브랜치를 update한다.
  • `git merge <branch-name>` : 최종적으로 기능 브랜치를 dev로 merge


12. Pull Request (PR)

  • 수정한 변경 사항이 있는 branch를 가져가 검토하고, 이를 타 브랜치로 병합해달라고 요청하는 것
  • PR을 통해 코드 충돌을 최소화할 수 있고, push 권한이 없는 오픈 소스 프로젝트에 기여할 때 많이 사용된다
728x90
반응형
Comments