• 효율적인 협업이 가능해진다.
• 버전 관리가 쉬워진다.
• 가지치기와 병합이 가능하다.
• 대부분의 작업이 로컬에서 진행되기 때문에 가볍고 빠르다.
• 여러 사람이 동시에 분산 작업이 가능하다.
• 프로젝트의 무결성을 보장할 수 있다.
• 수정한 내용을 반영하기 전 검토하는 과정인 준비 영역이 있다.
• 오픈 소스이다.
cmd창에서 git
혹은 git --version
을 입력하여 설치 유무를 확인할 수 있다.
git config --global user.name "abc"
git config --global user.email "abc@abc.com"
* 프로젝트 마다 사용자 정보를 다르게 지정하고 싶다면 --global
옵션을 빼면 된다.
git config user.name "abc"
git config user.email abc@abc.com
설정 정보를 확인하려면 git config --list
git init
명령어를 입력하면 기존 디렉터리를 git repository로 설정할 수 있다.
git 저장소를 만들면 .git 이라는 디렉토리(폴더)가 새로 생성된다.
특정 이름으로 git 저장소를 만들고 싶다면 git init <이름>
명령어를 실행하면 된다.
* 특정 폴더로 이동하려면 cd 폴더명
Git은 3가지 영역으로 구분된다.
작업 영역(working directory) - 준비 영역(staging area) - git 저장소(repository)
① Git 파일 생성
-git add
: 파일을 준비 영역으로 보내기
-git add .
: 한 번에 여러가지 파일을 준비 영역으로 보내기
② Git 저장소 반영
-git commit
: 준비 영역에 있는 파일을 git 저장소에 저장
git에 저장할 때는 파일의 어느 부분을 수정했는지 메시지를 남겨야 한다.
-git commit -m <커밋 메세지>
: -m 뒤에 커밋 메시지 작성
-git commit --amend
: 저장소 반영 내용 변경
-git commit --amend -m <커밋 메세지>
: 커밋 메시지도 함께 변경
③ Git 관리 상태 확인
-git status
: 준비 영역의 파일 상태 확인
-git log
: 깃 저장소 반영 내역 확인
-git diff
: commit된 파일들 중에서 변경된 사항을 비교
-git reset
: 준비 영역에 올라가 있는 파일들을 Untracked 상태로 내림
git status
했을 때 상태 의미
①Changes to be committed:
-> 준비 영역에 있다는 의미
②Changes not staged for commit:
-> 파일 수정이 되었지만 준비 영역에 보내지진 않았다는 의미
③Untracked files:
-> 준비 영역에 없다는 의미
Git의 LifeCycle
Git의 관리대상인지 아닌지에 따라Tracked
/Untracked
로 나뉨
Tracked
: Git의 관리대상
Untracked
: Git의 관리대상이 아님
Unmodified
: 수정되지 않음
Modified
: 수정됨
Staged
: 커밋 직전, 준비 영역에 위치
git log
옵션 🔗log 명령어 정리
-p
,--patch
: diff와 같은 역할로, commit의 수정 결과를 보여준다.-n
: 보여줄 commit의 개수를 지정. 상위 n개의 commit만 보여준다.--stat
: commit의 통계 정보 조회. 어떤 파일이 수정됐는지, 파일이 얼마나 변경됐는지, 라인을 얼마나 추가하거나 삭제했는지 보여준다.--pretty
: 원하는 포맷으로 히스토리 조회.--pretty=oneline
하면 commit을 한 줄로 출력--graph
: commit간의 연결된 관계를 아스키 그래프로 출력git log -S <텍스트>
: 변경된 코드 중 특정 텍스트가 포함되어 있는지 검사git log --oneline git log --pretty=oneline git log --graph
Git Branch는 각각의 Branch들이 서로 영향을 받지 않으며 독립적으로 작업을 진행하기 위한 것
① git branch <branch명>
: Branch 생성
② git branch
: 현재 Branch 확인
③ git checkout <branch명>
: Branch 전환 | snapshot을 넘나들기
④ git merge <branch명>
: Branch 병합
⑤ git branch --merged
: 병합된 Branch 확인
⑥ git branch -d <branch명>
: 사용을 마친 Branch 삭제
* A 브랜치를 B 브랜치로 Merge할 때 (A => B)
git checkout B <!--B Branch로 전환--> git merge A <!--A Branch를 Merge-->
• Merge conflict : 두 Branch에서 같은 파일을 수정하고 병합 하면 충돌이 발생
Merge conflict 해결 방법
git status
명령어로 충돌이 발생한 파일 확인한다.- 해당 파일을 열어 수정하고, 특수 기호들은 지워준다. ex) <<<<<<, ======
- 충돌이 해결되고 난 후에는 다시
git add
git commit
과정을 거쳐 Merge한다.
원격 저장소 - 인터넷이나 네트워크 어딘가에 있는 저장소
ex) GitHub, GitLab
git clone [저장소 주소]
: 원격 저장소 받아오기(=복사)
git remote add [저장소 단축이름] [저장소 주소]
: 원격 저장소 추가
git remote rename [기존 이름] [새 이름]
: 원격 저장소 이름 변경
git remote rm [저장소 이름]
: 원격 저장소 삭제
git remote
: 저장한 저장소 내역 확인
git remote -v
: 저장한 저장소의 이름과 주소 확인
git pull [저장소명] [브랜치명]
: 원격 저장소에서 데이터 가져오면서 자동 병합
git fetch [저장소명] [브랜치명]
: 원격 저장소에서 데이터를 가져오기만 함. 병합은 별도로 진행
git merge [저장소명]/[브랜치명]
: fetch 후 병합
git push [저장소명] [브랜치명]
: 작업한 내용을 원격 저장소에 반영
<!--git pull,
자동 병합되기 때문에 별도의 병합 과정이 필요없음-->
git pull origin master
<!--git fetch,
병합을 별도로 진행해야함-->
git fetch origin master
git merge origin/master
<!--원격 저장소 만들고 로컬저장소의 내용을 push로 동기화-->
git remote add origin (저장소 url)
git push origin master
* 원격저장소의 단축 이름 default 값은 origin이다. 때문에 clone으로 복사해 온 저장소의 이름은 origin으로 통일된다.