Git & GitHub
Git 공식사이트:
https://git-scm.com/
Git 이란?
버전 관리 시스템
사용언어: UNIX
다운로드 & 설치
Git 공식사이트에서 다운로드 한 후 설치하고,
Git bash 로 들어가서,git --version 라고 치면, 해당 git의 버젼정보가 나온다
Git 사용하기전 기본으로 알아야 할 사항들
1. git의 구조 - 로컬영역
-작업 영역 (Working directory) - 실제 작업하는 곳
-준비 영역 (staging environment / index) - git이 지켜보도록 작업 영역의 파일들을 집어넣는곳
-최종 버전의 저장소(commit / HEAD) - 모든것이 완벽히 끝났을때 최종 버전을 만드는 곳
2. git의 구조 - 원격 서버
- 브랜치 (Branch)
- master: 저장소의 기본 브랜치
- 사용자 지정 브랜치: 여러개를 만들어서, 개발 후 나중에 master에 병합
(기본 브랜치의 내용을 복사해와서 개별적으로 개발)
< 사용방법 - 로컬영역: 나만 볼수 있음>
-설치한 git bash 실행 > git을 적용한 폴더로 이동 (cd ~/디렉토리)
[1] 새 프로젝트에 Git 적용하기
0. 폴더 만들기 (pc에 새폴더 만들기)
실습: 바탕화면에 폴더명 project으로 새폴더 생성함.
1. 저장소 만들기 (Initializing)
< 명령어: git init >
실습: git bash에서 새폴더로 이동해서 거기서 명령어씀
cd ~/Desktop/project (엔터) > git init (엔터)
-> desktop/project/.git 폴더가 생성됨
2. 준비영역에 파일 추가하기 (adding)
< 명령어: git add 파일명>
실습: project 폴더안에 index.html 파일을 저장후
git bash에서 git add index.html (혹은 git add . 모든 파일 추가)
-> git add명령어로 작업영역의 파일을 준비영영으로 추가해주므로써,
git이 index.html 을 추적하기 시작하므로 모든 변화를 감지하게 됨.
3. 최종 확정짓기 (committing)
< 명령어: git commit -m "이 최종 버전에 대한 메세지" >
실습: git commit -m "add index.html"
-> git commit을 통해, 준비 영역의 파일을 최종 버전으로 만들어 줌
< 명령어: git log >
-> 마지막으로 commit한 정보를 보여줌
*상태확인하기 (status)
<명령어: git status>
- 파일이 수정되었을 경우 : modified: 파일명 이라고 메세지가 뜸
--------------------------------------------------------------------
[2] 준비 영역에서 파일 수정
준비영역에서 git이 추적 중인 파일을 수정 했을 때,
실습: index.html 파일에 <h1>수정함</h1> 을 추가한다.
경우1. 이 수정한 파일을 수정 전 상태로 되돌리겠다.
<명령어 git checkout 파일명>
실습: git bash 에서 git checkout index.html 치고 파일로 돌아가보면,
수정하기전으로 돌아가 있음을 확인 가능 (결과: <h1>수정함</h1>이 없음)
경우2. 수정한 사항을 그대로 준비영역에 저장하겠다.
<명령어 git add 파일명 >
실습: git add index.html (or git add .) 라고 치고 git status 를 해보면,
준비 영역에 수정된 index.html이 추가 되어 commit 대기 중인것을 알수 있다.
(결과: <h1>수정함</h1> 이 있음)
경우3. 수정된 파일이 준비영역에 들어있지만, (수정1)
그 파일을 재 수정하면 이 파일은 작업영역에 있는데 (수정2)
수정2를 준비영역에 있는 수정1에 덮어 씌우고 싶은경우
<명령어 git reset HEAD 파일명>
실습: 경우2를 마친후(수정1), <h1>재수정함</h1>으로 변경하고 저장(수정2)
git bash에서 git reset HEAD index.html을 한다
(결과: 파일내용엔 <h1>재수정함</h1>이 있고,
git status 해보면 이 파일이 준비영역에서 commit 대기중인것을 확인가능)
-> 수정함이 사라지고 재수정함이 존재함
<checkout vs. git reset HEAD 파일명 차이>
checkout은 준비영역에서 그대로이고,
reset Head는 준비영역에서 빠짐 (upstaging)
<준비 영역에서의 모든 수정사항을 한번에 커밋하기>
git add --all
--------------------------------------------------------------------
[3] 파일 삭제하기
준비영역에서 git이 추적 중인 파일을 삭제 했을 때,
실습: index.html 파일을 삭제한다.
방법1. <명령어 git rm 파일명> - 방법2를 한번에 적용함.
실습: git rm index.html
(결과: index.html 파일이 폴더에서 삭제되고, 준비영역에서 삭제된것을 기록됨)
방법2. 폴더에서 delete 키로 index.html을 삭제한 후 >
git add index.html 을 해줌으로써 준비영역에 삭제 내용을 기록함.
삭제된 파일 되돌리기
방법 1. <명령어 git checkout 파일명>
실습: 폴더에서 직접 파일을 삭제한 후
git bash에서 git status 치면 deleted: 파일명이 나타나고
git checkout index.html 치면 삭제된 파일이 다시 폴더에 생성됨을 확인 가능
방법 2. <명령어: git reset HEAD 파일명>
실습: git bash에서 git rm index.html 로 파일을 삭제후,
git checkout index.html 로 파일을 재 생성되고 준비영역에서도 추적함
--------------------------------------------------------------------
[4] 원격 서버로 최종 버전의 저장소(commit / HEAD)의 내용을 전송하기
<명령어: git push origin master or 다른 브랜치명>
다른 원격 서버로 내용 전송하기
<명령어: git remote add origin 원격 서버 주소>
< 사용방법 - 원격 서버 영역: 공동 작업구역으로 여러사람이 볼수 있음>
-브랜치 사용방법
[1] 사용자 브랜치 생성하기
<명령어: git branch 브랜치명>: 현위치에서 새로운 브랜치 생성하기 (이동은 안함)
<명령어: git checkout -b 브랜치명> : 브랜치 생성과 동시에 이동하기
[참고]로컬 저장소의 master 브랜치에서 버전(commit한것들)중 하나를 브랜치로 만들기
방법: 마스터에서 git log 로 버전정보를 확인한다 (이제껏 commit한 내용들)
그 중 원하는 버전으로 이동하기 위하여, commit 다음의 해쉬태그(긴 이름)을 복사한후
git checkout 복사한 이름 > 엔터를 치면,
HEAD is now at 복사한 이름이 나오고 이동된것을 확인 할 수 있다.
에디터에서 파일을 열어보면, 내용이 바뀌어있는것을 확인가능하고
수정과 add commit 모두 할 수 있고 여기에서 또 새로운 버전이 생성될 수 있다.
but, git log를 쳐보면 이 버전에 해당하는 HEAD내용만 나오고
이는 마스터에서는 보이지 않는다.
이 버전에 긴 이름대신 브랜치명을 주어 브랜치로 만든다.
<명령어: git branch 원하는 이름 긴이름>
원래 최신 버전으로 돌아가기 위해서는 git checkout master이라고 쳐주면 된다.
[2] 브랜치 이름 변경하기
< 명령어: git branch -m 변경할브랜치명 새로운브랜치명>
[3] 원하는 브랜치로 이동하기
<명령어: git checkout 브랜치명>
[4] 브랜치 삭제하기
< 명령어: git branch -d 브랜치명>
[5] 브랜치 위치 확인하기
<명령어: git branch >
-> *붙어 있는 곳이 현재위치
[6] 브랜치 합치기
<명령어: git merge 마스터에 덮어씌울 브랜치명>
->마스터에서 이 명령어 실행