2018.09.10 - Git 시작하기

2 분 소요

참고자료

history - 파일이 처음 생성되고 나서부터 변경사항을 전부 모아놓은것

리모트 저장소 : 보통 github을 말한다.

거의 모든 명령을 로컬에서 실행

  1. 히스토리를 조회할 때 서버 없이 조회한다
    • 속도가 빠름
  2. git의 무결성
    • 우리가 원하는 데이터가 그대로 보존된다
    • 해시 충돌이 발생하지 않아야 무결성이 보장된다고 한다.
    • 체크섬 :
    • SHA-1 체크섬 :
  3. git에는 데이터를 추가한다
    • 어떤 작업을 했다는 사항이 추가되는 것
    • programming과 관련없는 코드가 들어가면 안된다
  • 세 가지 상태
    • committed : 데이터가 로컬 데이터베이스에 안전하게 저장된 상태
    • Modified : 아직 git에는 올라가지 않았았는데 수정이 된 상태
    • Staged : 수정된 파일을 곧 커밋할 것이라고 표시한 상태
    • 순서(한가지 상태가 더 있다 : Modified -> Staged -> committed

    • staged는 unmodified상태와 같다
    • untracked
  • CLI 와 GUI
    • CLI : command line interface
      • 명령어 인터페이스
    • GUI : Graphic user 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는 갈라졌던 작업들의 내용의 기록이 필요없을때 사용한다.

branch