git의 모든 기능을 잘 수행할 수 있도록 터미널을 사용하여 먼저 써보는 것을 추천한다.
git [명령어] -옵션
의 형태로 사용한다.
디렉토리를 새롭게 만들어준뒤, 시작하고자 하는 디렉토리에서 git init
명령어를 사용하여 초기화해준다.
git은 기본적으로 소스코드를 버전별로 관리하는 툴이다. 따라서 다음의 3단계로 나눠 소스코드를 관리한다.
- working directory
- staging area
- .git directory
working directory : 말 그대로 수정이 되고 있는, 작업중인 소스코드가 있는 공간이다.
staging area : 어느정도 수정이 완료되어 해당 영역까지의 변화를 기록해둔 상태이다. 여기에서 commit
을 통해 현재 상태를 저장한다.
.git directory : commit 메세지와 소스코드를 갖고 있는 공간이다.
여기까지만 작업하면 나의 로컬 환경에서만 버전 관리가 이루어지고 있기 때문에, 우리는 보통 github와 같은 원격 저장소에 push
를 통해 업로드한다.
git add <파일명>
git rm --cached <파일명>
(git status -h
옵션을 사용하여 자세한 정보를 체크해볼 수 있다)
프로젝트를 하다보면 git으로 관리하고 싶지 않거나, 추가하고 싶지 않은 요소가 있을 수 있다. 해당 요소는 .gitignore
파일에 작성하면 git은 더이상 해당 파일을 tracking하지 않는다.
어떤 파일이 수정되었는지 체크해볼 수 있는 명령어
git diff --staged
와 같이 옵션을 주게 되면 stage 영역에 있는 요소들의 변화를 캐치해줄 수 있다.
(staged와 cached는 동일힌 키워드로서 작동한다!)
stage영역에 있는 파일을 업로드하는 명령어이다.
git commit -am "commit msg"
의 경우, -a : 모든 파일을 -m : 다음의 메세지로 commit한다는 뜻
다양한 옵션을 통해 원하는 형태의 로그를 출력하는 기능
특정 커밋까지의 이력을 초기화하는 기능. 바로 전이나 n번 전까지의 작업 내용을 취소할 수 있으며 이력이 지워지기 때문에 주의해서 사용해야 한다.
특정 커밋을 취소하는 새로운 커밋을 만드는 기능.
기능 및 작업 별로 분기를 나눠서 진행하고자 하는 경우가 있을 수 있다. 또한 동일한 파일을 수정했을 때 충돌이 발생할 수 있으며 그 부분을 해결하는 과정은 상당히 머리가 아파온다...
이런 문제를 해결할 수 있는 방법이 바로 branch이다. 고유의 작업 공간을 가지고 있어 서로 영향을 받지 않고 동일한 파일을 수정해도 문제가 없으며, 특정 브랜치의 작업이 완료되면 수정 사항을 다른 브랜치에 합칠 수 있다.
새로운 브랜치를 생성하는 명령어
특정 브랜치로 이동하는 명령어
브랜치를 합치는 명령어
git swtich main
git merge <합치고자하는 브랜치명>
위의 명령을 수행하면 main 브랜치에 다른 브랜치를 병합할 수 있다.
같은 파일의 동일한 위치를 수정하는 등 자동으로 병합이 불가능한 경우 충돌(conflict)가 발생한다.
충돌이 발생한 경우 출돌을 해결하고 커밋을 하거나, 머지 작업을 취소(git merget --abort
)할 수 있다.
충돌이 발생한 경우 어느 부분에서 충돌이 발생하였는지 알려주기 때문에 개발자 본인이 직접 보고 맞는 코드만 남기고 충돌되는 부분을 지워 다시 커밋을 해야한다.
지금까지는 내 컴퓨터 즉, 로컬환경에서 소스코드 버전 관리를 했다면 그 사항을 원격 저장소에 저장하는 것이 안전할 것이다. 이 서비스를 제공하는 github은 단순 저장소의 기능 뿐만 아니라 이슈 관리, 코드 리뷰 등 다양한 기능을 제공한다.
깃허브에 가입하여, 하나의 저장소에 해당하는 레포지터리를 생성한다. 레포지터리가 생성되고 나면 로컬에서 만들었던 저장소를 이 원격 저장소(레포지터리)에 push
하면 된다.
단순히 push를 해서는 안되고, 먼저 우리의 로컬 저장소와 원격 저장소를 연결해야 한다.
git remote add <name> <url>
git push -u origin main
위 코드는 다음의 과정이다,
1. main 브랜치에 원격 저장소를 origin
(기본)으로 설정한다.
2. 메인 브랜치를 main
으로 설정한다.
3. 설정한 원격 저장소에 로컬 저장소의 모든 커밋을 푸시한다.
git clone <레포 주소>
기능을 사용하여 원격 저장소의 코드를 내려받을 수도 있다.
여러 명의 개발자와 협업을 하다보면 내 로컬저장소의 코드와 원격저장소의 코드가 다를 수 있다. 따라서 작업을 시작하기 전, 먼저 원격 저장소에서 가장 최신 코드를 가져온 뒤 코딩을 시작하도록 하자. git pull
명령어를 사용한다.
컨페티가 펑펑 터지면서 배포가 끝났다고 나오는 화면을 캡처하지 못해 아쉽다.
에러가 발생하여 구글링을 열심히 해봤더니 package.json에 나의 노드 버전을 적어주었더니 해결됬다. Error: error:0308010C:digital envelope routines::unsupported 이 에러였다.
"engines": { "node": "16.16.0" }
위 구문을 추가하여 해결했다.