Git 알아보기
버전 관리 시스템 (Version Control System) : 이전에 작성한 내용을 보존해주는 시스템
버전 관리는 각 버전 별로 변경된 이력들을 저장하는 작업이고, 이것을 업데이트 할 때마다 코멘트로 누가, 어떤 파일을 추가, 수정, 삭제했는지 확인할 수 있다.
버전 관리 시스템 중 가장 많이 쓰이는 도구가 git이다!
git을 사용할 줄 안다면 할 수 있는 것은....
버전 관리 능력과 협업의 기본을 배우고, 오픈 소스(open source: 소스 코드가 공개된 소프트웨어) 생태계에 기여할 수 있는 멋진 개발자가 될 수 있다 !
git으로 관리되는 파일은 Github, Gitlab, Bitbucket 등의 여러가지 원격 저장소를 이용해서 백업과 협업을 할 수 있다.
Git이란? 개발자의 코드를 효율적으로 관리하기 위해서 개발된 '분산형 버전 관리 시스템'.
소스 코드 기록을 관리하고 추적할 수 있는 버전 관리 시스템
Github = Git Repository를 관리할 수 있는 클라우드 기반 서비스
= 내 컴퓨터에서 Git으로 관리하는 프로젝트를 올려둘 수 있는 사이트
그러니까, git으로 버전을 관리하는 폴더에 대해서 github을 통해 여러 사람들이 공유하고 접근할 수 있는 것.
한 마디로 개발자의 SNS임!!!! Github에서 code review등을 통해 협업이 가능하고, 수 많은 오픈 소스 프로젝트들이 github로부터 호스팅되고 있어서 누구든 자유롭게 기여할 수 있음.
오픈 소스 (소스 코드가 공개된 소프트웨어)는 누구나 자유롭게 해당 기능을 추가하고 개선할 수 있다. 이 작업을 기여하다 (contribute)라고 한다.
Github의 기능과 git 명령어
- fork
- remote에 있는 다른 repository에서 fork를 해서 remote에 있는 내 repository에 가지고 온다.
- clone
- git clone 명령어 뒤에 repository 주소를 입력하면 해당 repository를 내 컴퓨터 (local repository)로 가져와서 작업할 수 있다.
- status : 어떤 파일이 어떤 상태에 있는지, 해당 파일에 대해 어떤 행동을 할 수 있는지 알 수 있는 명령어.
- git status 명령어를 통해 staging area와 untracked files 목록에 어떤 것들이 있는지 확인할 수 있다.
- 어떤 파일이 어떤 부분에서 충돌이 발생한 것인지 확인 가능.
- 예) merge conflict가 발생해서 automatic merge가 실패하는 등
- restore : 변경 사항을 폐기 (discharge changes)하는 명령어.
- commit 되지 않은 Local repository의 변경 사항을 취소할 수 있다.
- 내 코드를 다 밀어버리고 새로 작업할 때. 처음 clone받았던 상태로 되돌리는 방법!
- git restore mypage.js 식으로 사용 가능
- add : 파일을 commit 할 수 있는 상태로 만들어 준다.
- git add 명령어를 통해 untracked files (git의 트래킹 되고 있지 않은 파일들) 목록의 파일을 commit 할 수 있다.
- git add <파일명> : 내 local의 untracked file을 git의 관리하인 staging area로 추가
- ex) git add my page.js
- git add . : staging area에 모든 파일을 한번에 추가할 수 있다.
- commit : 특정 시점에 생성된 백업 복사본을 만들어 주는 작업. 이전 기록들에 대한 추적이 가능해짐.
- 변경 사항을 저장하기 위해 commit 활용. 간단한 메모로 버전의 변경 기록 관리 가능.
- 언제, 누가 , 어떤게 변경이 되었는지 저장가능.
- staging area에 있는 파일만 commit 가능
- git commit -m '메세지' 명령어를 통해 커밋할 내용 코멘트 작성 가능
- ex) git commit -m 'mypage 구현'
- git add 명령을 실행한 후에 또 파일을 수정한다면 git add 명령을 다시 실행해서 최신 버전을 staged 상태로 만들어 줘야 한다.
- 이사할 때 짐 넣었다가 다른걸 추가하면 라벨링에 추가해주는 것 처럼 !!
- reset : 방금 local에서 commit한 기록을 취소하고 에러를 수정하고 싶을 때 쓰는 명령어
- 아직 remote repository에 업로드 되지 않고 local repository에만 commit 해 놓은 기록이라면 reset 명령어를 통해 commit 취소 가능
- git reset
- git reset HEAD^ : 가장 최신의 commit 취소
- 추가적으로 hard,soft 옵션도 있는데 rest에 대해서 더 공부하고 싶다면 git reset —hard vs —soft 등의 검색어로 구글링 한 후 실습해 보는것 추천
- log : 현재까지 commit된 내역들을 터미널 창에서 확인할 수 있는 명령어
- git log -- 현재까지 commit된 로그들을 터미널 창에서 확인. 이 터미널 창은 q 입력해서 종료
- pull request : 내가 remote repository에 push 해 높은 변경 사항에 대해서 함께 작업하는 사람들에게 알리는 것.
- 현업에서는 PR을 날린다고 함.
- 여러 동료들의 리뷰 받기 가능. 내가 올린 작업을 기존 코드에 병합 가능.
- pull : remote repository의 작업 내용을 가져오는 명령어
- git pull <shortname> <branch> : remote repository의 해당 branch 내용을 local repository로 가져옴
- get pull pair master - 페어의 remote repository에 있는 작업 내용 받아오기 가능. 받아오는 내용은 자동으로 병합됨!
- push : local에서 변경, commit 되 사항을 remote repository에 업로드
- git push <origin> <branch> : 리모트에 있는 origin의 master 브랜치에 local repository의 변경 사항을 업로드하기 위해서는 git push origin master라고 입력한다.
- init : 기존 디렉토리를 git repository로 변화하거나 새로운 repository를 초기화하는데 사용
- 내 컴퓨터에서 생성한 디렉토리를 init 명령어를 통해 git의 관리하에 들어가게 만든다
- remote add : github에서 원격으로 관리하기 위해 local repository를 remote repository와 연결하는 작업에 사용하는 명령어
- git remote add origin : 나의 remote repository에 연결
- git remote add origin <repository 주소> : local repository에 remote repository 연결
- 명령어를 입력했을 때 터미널 창에 나타나는 변화는 없음
- git remote add ___ <repository 주소> : 상대방의 repository와 연결
- remote -v : 연결된 remote repository 확인 명령어
- git remote -v : 현재의 local repository와 연결된 모든 remote repository 목록 확인
Git의 세 가지 영역 및 상태
git의 local repository의 영역들
- untracked area : git이 관리하고 있지 않은 영역
- tracked area : 이곳에 들어온 파일들만 git의 관리를 받을 수 있다. 이 내부에서도 세가지 상태로 나누어 진다.
- unmodified : 기존에 commit했던 파일을 수정하지 않은 상태
- modified : 기존에 commit 했던 파일을 수정한 상태
- staged : commit이 가능한 상태, 수정한 파일을 commit 하기 위해서는 staged area에 add 하는 작업 필요
협업 중 충돌 상황이 생긴다면?
git status 명령어를 통해 확인 후 수정하고.
accept current change를 클릭해서 내가 수정한 내용으로 파일 반영
accept incoming change를 클릭해서 remote repository의 내용으로 파일에 반영할 수도 있음.
accept both change는 변경 사항 모두를 반영
직접 파일 수정해서 반영하는것도 가능
수정을 마치면 병합 커밋 (merge commit)을 생성해주기 위해서 파일을 staging area로 추가하고, merge commit은 자동으로 commit 메세지가 생성된다. 이 메세지는 물론 수정 가능.
git commit 명령어로 자동으로 생성된 commit 메세지를 남기고 remote repository 에 push 한다면 다음 화면과 같이 merge branch 'master' of 라는 commit 메세지가 기록됨.
remote repository로 push 완료!