Git
은 개발자가 반드시 알아야할 기술 중 첫번째로 뽑을 정도로 굉장히 중요한 기술입니다.
그 Git
을 제대로 공부하기는 매우 어렵고, 대부분의 상황에서는 그 모든 것을 알 필요는 없습니다.
그래서 이번 포스팅에서는 실무에서 사용하는 필수 명령어들을 알아보도록 하겠습니다. 1편에서는 clone, add, commit, pull, push 등의 명령어에 대해 알아보겠습니다.
Git은 버전관리 시스템입니다(소스코드 형상관리 시스템). 버전 관리 시스템을 쉽게 설명하자면 게임 중간 저장과 같습니다.
게임 하다가 죽으면 저장한 곳에서 다시 시작 하듯이 Git에 새로운 버전을 저장하고(commit), 개발하다 문제가 생기면 이전에 저장한 버전으로 돌아갈 수 있습니다.
Git은 또한 협업 도구입니다. 개발자들은 Git을 통하여 팀원들 끼리 소스코드를 공유하고, 다른사람이 작업한 내용을 받아 올 수 있습니다. (Git과 같은 툴이 없다면 우리는 이메일로 소스코드를 공유하고 합쳐야 할 지도 모릅니다.)
-> ref: https://www.git-tower.com
협업을 위해 Git Server를 만들어 여러 개발자들이 소스코드를 공유합니다. 이를 Remote Repository
라고 합니다. clone
, push
, pull
과 같은 명령어로 Remote Repository
에 자기가 만든 버전을 공유하고 다른 사람의 작업을 받아 올 수 있습니다. Remote Repository
를 제공하는 대표적인 서비스는 Github
, Gitlab
, Bitbucket
이 있습니다.
git clone {다운 받을 git 주소}
git clone
명령어는 이미 존재하는 remote git 프로젝트를 다운 받는 명령어 입니다. 다른 팀원이 작업한 프로젝트에서 다운받을 수 있습니다.
github의 경우 위 그림 처럼 code를 누르면 다운 받을 git 주소를 알 수 있습니다.
이미 있는 git프로젝트 말고 자신의 프로젝트에 git을 추가하려면 어떻게 할까요?
cd {myProject}
git init
git remote add origin {remoteAddress}
git branch -M main
git push -u origin main
git init
명령어는 git 프로젝트를 시작하는 명령어입니다. 프로젝트 내 .git
폴더가 생성되고 프로젝트에서 git 명령어들을 사용할 수 있어집니다.
git remote add
명령어는 remote repository과 자신의 프로젝트를 연결하는 명령어입니다. origin
이라는 이름에 remoteAddress
를 연결합니다.
branch
와 push
명령어는 자주 쓰는 명령어로 이후에 다시 다루도록 하겠습니다.
위의 명령어를 사용하면 git 프로젝트를 시작하고, remote repository에 자신의 프로젝트를 시작할 수 있습니다.
git에는 staging
local repository
remote repository
가 존재합니다.
local repository
는 버전이 저장되는 내 컴퓨터 repository를 의미하고, remote repository
에는 버전이 저장되는 원격 서버를 의미합니다.git status
git status
는 저장된 버전과 비교해 현재 어떤 파일들이 변경되었는지 확인하는 명령어 입니다. 어떠한 파일들이 변경되었는지 확인 할 수 있습니다.
# 특정 파일을 stating에 추가
git add {Staging에 추가할 file}
# 모든 파일을 staging에 추가
git add -A
git add
명령어는 staging에 파일을 추가합니다. git status
명령어를 활용해 변경된 파일이 무엇인지 확인하고 staging에 추가합시다.
변경된 모든 파일을 staging 하려면 -A
옵션을 추가합니다.
git commit
git commit -m "{message}"
git commit
명령어는 새로운 버전을 생성하는 명령어입니다. staging에 올라간 변경사항을 local repository에 저장합니다.
commit시 다음과 같은 창이 나오면 메세지를 써주고 끄면 메세지와 함께 commit이 생성됩니다.
-m
옵션을 사용하면 commit시 메세지를 추가할 수 있습니다.
git push {remoteName} {branchName}
git push {remoteName}
git push
git push
명령어는 local repository에 있는 버전(commit)들을 remote repository에 추가합니다. push를 통해서 다른 개발자들과 작업한 내용을 공유할 수 있습니다. git은 여러 remote repository를 가질 수 있기 때문에 명시적으로 remote repository의 이름을 명시해 줄 수 있습니다. git push origin
다음 포스팅에서 다룰 branch도 명시해 줄 수 있습니다 git push origin develop
, 명시한 branch의 내용을 push 합니다.
git pull
git pull {remoteName}
git pull {remoteName} {branchName}
git pull
명령어는 remote repository에 있는 버전들을 local repository로 가져오는 명령어 입니다. 다른 개발자가 작업한 내용을 가져올 수 있죠. push 와 마찬가지고 remote repository 이름과 branch이름을 명시 할 수 있습니다.
다른 사람이 작업한 내용을 가져오려고 git pull
명령어를 사용하면 CONFLIC
이란개 발생합니다.
이는 같은 파일을 동시에 변경할때 발생합니다. git은 어떤 변경이 올바른지 알지 못하기 때문에 우리가 해결해줘야합니다.
IDE로 conflict이 난 파일을 확인하면
요런식으로 나타나는데 ===== 위에
HEAD는 local repository의 내용이고,
밑에는 remote repository의 내용입니다.
두개의 변경사항을 보고 무엇이 올바른지 선택해 주면됩니다.
이렇게 하면 결국엔 올바른 파일만 남게됩니다.
git push
명령어를 사용했을때 CONFILIC 때문에 push가 안된다고 하면 git pull
을 해서 충돌을 해결한 다음에 push를 해주면 됩니다.
추후에 merge
rebase
명령어를 사용할때도 충돌은 자주 접하니 당황하지말고 침착하게 해결해보도록 합시다 ㅎㅎ
다음 포스팅에서는 독립된 개발 환경을 구성하하고 합치는 명령어인 branch, checkout, merge, rebase에 대해서 알아보도록 하겠습니다.
카우치코딩에서는 1:1 코딩 문제해결 멘토링 서비스입니다. 가르치는데 관심있는 멘토분들이나 문제해결이 필요한 멘티분들 방문해주세요~
또한 별도로 6주 포트폴리오 수업을 진행중에있습니다. 혼자 포트폴리오 준비를 하는데 어려움이 있으면 관심가져주세요~