효율적인 협업과 버전관리가 쉽기 때문.
가지치기가 가능하고 그것을 병합할 수 있음
메인 가지 하나 있고 그 옆으로 다른 기능을 만드는 가지들을 생성하고 병합해 하나의 프로젝트로 만들 수 있음.
각각의 기능을 각각 다른 사람이 개발 가능.
가볍고 빠름
분산 작업 가능
데이터가 보장됨
준비영역 있음.
오픈소스임
git config --global user.name "elice"
git config --global user.email fifi@elice.io
git config --list
=>
user.name=elice
user.email=fifi@elice.io
git init
기존의 디렉토리를 git repository로 설정함. 사용할 프로젝트로 이동 후 실행할것.
ls 를 통해 프로젝트 디렉토리에 .git 디렉토리가 생성되며 저장소 생성 완료된 것을 확인해볼 수 있음.
git init
을 통해 저장소를 만든 후 파일 수정을 하게 되면 git add
를 통해 staging area 로 이동시킴.
한가지면 git add
파일이름 여러가지라면 git add .
를 통해 전부 staging area로 이동시킬 수 있음.
이후 git status
명령어로 어떤 파일이 변경되었는지 파일 상태 확인 가능
수정한 파일을 staging 했으면 저장소에 메세지와 함께 저장하면 됨.
저장할 땐 git commit
명령어를 사용.
staging에 있는 모든 파일을 저장소에 저장하는 것.
git commit -m '변경사항에 대한 내용 등 정보 메세지 입력하셈'
이때 적은 메세지에 오타가 있거나 누락된 파일이 있는 경우 git commit --amend
명령어로 수정할 수 있음.
실행하면 텍스트 편집기 실행되고 수정부분 수정 후 저장하면 반영된다.
반영된 내용이 궁금하면 git log
를 통해 확인 가능하고 모든 commit 을 확인해 볼 수 있음.
git status
: staging file 들의 상태 확인
git diff
로 commit 된 파일 중 변경된 사항을 비교할 수 있음
git log
: git repository 에 존재하는 history 확인 (commit history)
대표적인 log 옵션
git log -p -n
git log --stat
git log --pretty=oneline
git log --graph
git log -S text
branch 는 독립적으로 어떤 작업을 진행하기 위한 개념
각각의 branch 는 다른 branch 의 영향을 받지 않는다.
브랜치 생성
```
git branch 브랜치 이름
```
을 입력하면 브랜치를 생성할 수 있음
브랜치 전환
git branch
elice
* master
명령어를 통해 현재 브랜치를 확인할 수 있음
현재 master 브랜치에서 elice로 전환하고 싶으면
git checkout elice
를 통해 전환 가능
checkout은 브랜치 전환하는데 사용할 수 있고 git log로 확인 가능한 snapshot을 넘나들때도 사용 가능
git checkout <snapshot hash>
를 이용하면 과거의 파일 내용 확인 가능
elice 브랜치에서 작업을 끝마치고 master 브랜치로 통합
우선 git checkout을 통해 master로 이동해서
git merge elice 로 병합을 해준다.
이때 elice브랜치 내용이 master 브랜치에서 업데이트 된 내용이기 때문에 곧바로 merge가 되는데 이것을 fast-forward라고 함,
git log --graph --all
을 통해 확인이 가능하다.
이렇게 갈라진 브랜치는 git checkout
을 통해 브랜치 이동해 git merge
로 병합 가능하다.
또한 git branch --merge
를 통해 merge된 브랜치를 확인 가능하다.
사용을 마친 브랜치는
git branch -d <브랜치 이름>
을 통해 삭제할 수 있다.
conflict는 merge한 두 브랜치에서 같은 파일을 변경했을 때 발생한다.
이때 git status
를 통해 어느 파일이 충돌났는지 확인할 수 있다.
충돌이 일어난 파일을 열어 수정해준 후 >>>>>>> ======== <<<<<<<
가 포함된 행을 삭제해준다.
수정 후 git add
git commit
과정을 거쳐 다시 merge 해준다.
충돌을 방지하려면 master 브랜치의 변화를 지속적으로 가져와서 충돌 발생 부분을 제거하는 것이다.
git clone 을 이용하면 기존의 git repository를 복사해올 수 있다.
Gitlab 또는 github에서 원하는 프로젝트의 clone 버튼을 누른 후 Clone with HTTPS 옵션으로 복사를 한다.
터미널에서 git clone 복사한 저장소 주소
를 입력한다.
git remote add origin 복사한 저장소 주소
를 입력한다.
연결된 원격 저장소는 git remote
를 통해 확인할 수 있다.
저장소의 이름을 변경하려면 git remote rename origin 변경할 이름
하면 변경 가능하다.
주소가 변경되거나 필요 없어진 저장소는 git remote rm git_test
를 통해 삭제 가능하다.
pull : 원격 저장소에서 데이터 가져오기 + 병합(merge)
원격 저장소에서 데이터를 가져와 로컬 데이터와 병합한다.
git pull
fetch : 원격 저장소에서 데이터 가져오기
원격 저장소에서 데이터를 가져오지만 병합하지는 않는다.
진행중인 작업을 마무리하고 병합해줘야 한다.
git fetch
이후 git log
를 통해 변경된 파일을 확인하고 merge 해준다.
저장소 발행 : 로컬 저장소에서 작업한 내용 원격 저장소에 반영.
다른사람이 먼저 push 한 상태에서는 push 할 수 없으니 다른사람이 작업한 것을 Merge 한 후 push 해야 됨.
git remote add origin
(또는 다른 원격 저장소 이름)으로 로컬 저장소와 연결git fetch
또는 git pull
을 이용해 원격 저장소 내용 동기화fetch
실행한 경우 git merge origin/master
로 병합을 완료해준다.git push origin master
를 이용해 변경 사항 원격 저장소에 전달.origin
내 컴퓨터 (로컬) 에 저장되어 있는 저장소와 원격 저장소를 연결하기 위해
git remote add origin 원격저장소 주소
명령 사용.
이 때 원격저장소 단축이름을 origin으로 지정한다는 의미.
단축이름을 꼭 origin 이 아닌 다른 이름으로 지정 가능.
기본적으로 만들어진 원격저장소의 이름은 origin이 default값이라 clone으로 복사해온 저장소는 origin으로 통일된다.
git remote 에 -v 옵션을 사용한 git remote -v
를 이용하면 지정한 저장소의 이름과 주소를 함께 볼 수 있다.
파일을 staging 시키고 commit 하고 git repository에 저장 후 git이 commit 된 버전을 효율적으로 관리하기 위한 방법
파일 영역의 라이프 사이클을 보면
working directory에 있는 파일을 git add 하면 staging area 이동하고 이것을 commit 하면 repository로 간다.
git의 영역은 HEAD, index, working directory로 이루어져있다.
wofrking directory 의 파일이 git add로 stage 되면 git에서 index가 되었다가 commit이 되면 HEAD가 되는 것.
snapshot
staging 되어진 데이터들 (index)을 commit 명령으로 영구 저장한 것을 말한다.
HEAD 역시 snapshot이며 현재 우리가 위치한 브랜치를 가리키는 포인터 역할도 같이 하게 된다.
git reset --<option> HEAD~
를 이용하면 HEAD 를 전의 snapshot으로 이동시킬 수 있다.
git reset --soft HEAD~
를 이용하면 예전버전으로 돌아가 commit을 수정할 수 있다.
git reset --hard HEAD~
를 이용하면 working directory에 존재하는 파일도 사라진다.