2018.09.10 - Git 시작하기
참고자료
history - 파일이 처음 생성되고 나서부터 변경사항을 전부 모아놓은것
리모트 저장소 : 보통 github을 말한다.
거의 모든 명령을 로컬에서 실행
- 히스토리를 조회할 때 서버 없이 조회한다
- 속도가 빠름
- git의 무결성
- 우리가 원하는 데이터가 그대로 보존된다
- 해시 충돌이 발생하지 않아야 무결성이 보장된다고 한다.
- 체크섬 :
- SHA-1 체크섬 :
- git에는 데이터를 추가한다
- 어떤 작업을 했다는 사항이 추가되는 것
- programming과 관련없는 코드가 들어가면 안된다
- 세 가지 상태
- committed : 데이터가 로컬 데이터베이스에 안전하게 저장된 상태
- Modified : 아직 git에는 올라가지 않았았는데 수정이 된 상태
- Staged : 수정된 파일을 곧 커밋할 것이라고 표시한 상태
-
순서(한가지 상태가 더 있다 : Modified -> Staged -> committed
- staged는 unmodified상태와 같다
- untracked
- CLI 와 GUI
- CLI : command line interface
- 명령어 인터페이스
- GUI : Graphic user interface
- CLI : command line interface
[zsh설치 및 개발 환경 참고 블로그] (https://subicura.com)
git diff –staged : add로 추가된 staged 영역을 보여준다 git diff : add 로 추가되기 전에 modifed된 영역을 보여준다
-
무시하고 싶은 파일은 gitignore속에 적는다:
$ vim gitignore
모든 abc 파일
abc.txt
> 현재 해당 폴더 안의 파일
`/abc.txt`
###[__gitignore 참고 사이트__](https://gitignore.io)
파일 삭제하는 방법
rm 명령어를 이용한다.
ex) abc.txt 파일 삭제 방법
$ rm abc.txt
$ git add abc.txt
$ git commit -m 'abc.txt파일 삭제'
staged 영역에서 지우는 방법
$ git rm --cached abc.txt
파일 복사하는 방법
$ cp <원본> <대상 (파일이름 생략가능)>
-
branch 는 commit 을 가리키는 pointer
- 기본적으로 Head 는 branch를 가르킨다
- 현재 작업 내용이 Head를 통해 설정된다
- checkout은 commit의 이동에도 쓰지만 Head 포인터를 움직일 때도 쓰인다
$ git checkout 'branch name'
, branch
git을 원격 저장소에 저장하기
- 원격 저장소 추가하는 방법 ( Github 사용 )
- 원격 저장소는 github이 아닌 다른 것을 사용할 수도 있다. github은 단지 하나의 플랫폼일 뿐이다.
- 만약에 origin 말고 원격저장소에 다른 branch명을 등록하고 싶으면 한번 더 작성해주면 된다.
$ git remote add <원격 저장소 주소> <현재 위치에서 생성되는 폴더의 이름>
# ex github-experiment 라는 원격저장소를 가진 폴더를 만들면
$ git remote add branch_name <원격 저장소 주소> github-experiment
# 일반적으로 branch_name에 origin을 쓴다
fetch
- 원격 저장소(github)에 저장되어있는 데이터를 가져온다.
- push와 반대라고 생각하면 된다. (pull은 아직 사용하지 않는다.)
Clone
- 원격 저장소에 있는 데이터를 가져 오고 싶을때
$ git clone <원격 저장소 주소> <현재 위치에서 생성하여 clone할 폴더의 이름>
conflict
- 같은 줄을 수정하고 merge를 하면 conflict가 발생한다
왜냐면 git은 두개의 파일이 같은 줄을 수정했을 경우 어떻게 합쳐야할 지 결정 할 수 없다. 따라서 그 conflict를 해결하기위해 에디터(텍스트 파일의 경우 vim)를 사용하여 conflict오류가 난 부분을 직접 수정해 줘야한다. 하지만 수정없이 한번 파일을 켰다가 그대로 저장하고 add해줘도 그대로 파일을 원격 저장소에 보낼 수 있다. 그렇지만 이 때 conflict오류가 난 부분에 불필요한 주석등이 들어가 있기 때문에 반드시 수정해주는 작업이 필요하다.
merge
- 두개의 브랜치가 하나의 조상(부모)데이터를 참조하고 있을 때 두 데이터를 하나로 합쳐준다. 이 때 두 branch가 같은 파일의 같은 줄을 서로 다르게 수정했다면 ‘conflict‘오류가 난다.
$ git merge < 현재 내가 위치한 branch가 아닌 다른 branch >
rebase
- 두개의 branch가 하나의 조상(부모) 데이터를 참조하고 있을 때, 다른 branch를 참조하여 그 branch 뒤에 위치 시키는 것을 말한다. merge와 결과적으로는 같지만 merge는 작업 내용들의 기록들을 남겨야할 때 사용하고, rebase는 갈라졌던 작업들의 내용의 기록이 필요없을때 사용한다.