git 사용설명서

j901207·2021년 2월 23일
1

git은 무엇인가?

깃은 어떤 역할을 하는가
git & github에서 정리를 한번 해본적이 있다.

간단한게 깃은 협업과 버전관리를 도와주는 프로그램이라고 할 수 있다.

git 구성

  • Local Repository
    보통 본인이 사용하고 있는 PC의 디렉토리라고 볼 수 있다.
    개인 피씨나 서버 피시를 하나의 로컬 레포지토리 (local Repository)라고 하는 것이다.
    여기에 저장된 내용을 실제로 다른 사람과 공용으로 사용하려면 원격 저장소 (remote Repository)에 변경사항을 저장하는 순서가 필요하다.

  • Remote Repository
    github에 수정한 코드를 올리는 행위가 remote Repository에 수정한 내용을 적용하는 것이라고 볼 수 있다.

  • Branch
    작업을 하는 하나의 분리된 공간이라고 볼 수 있다.
    어느 특정 브랜치에서 작업한 내용은 다른 브랜치에는 영향을 주지 않는다.

  • HEAD
    현재 작업하고 있는 branch가 될 수 있으며, 특정 커밋을 checkout을 통해 HEAD로 변경 할 수 있다.

$ git checkout <commit hash | commit tag> 

Workflow

깃을 어떻게 사용하게 될까?

  1. 로컬에서 작업을 한다. (폴더를 만들고 코드를 작성한다.)
  2. 원격 저장소와 연결한다. (git을 초기화 해주고 어느 원격저장소와 통신할지 설정한다.)
  3. 로컬에서의 변경내용을 로컬 저장소에 적용한다. (로컬 레포지토리에 버전등록이 된다. -commit-)
  4. 원격 저장소에 해당 버전을 적용한다. (로컬과 원격 저장소가 같은 변경사항을 가지게 된다.)

로컬 작업

먼저 폴더를 생성하고 다음 명령어를 통해 해당 폴더에서 깃을 사용할 수 있도록 초기화 해준다.

$ git init

초기화가 완료되었는지는,

$ ls -al

을 통해 .git파일이 생성된 것을 확인해 볼수 있다.

원격 저장소와 연결하기

github를 원격 저장소로 설정하게 된다면,
github에서 먼저 원격저장소로 사용할 repo를 생성해야 한다. (먼저 만들어 놓은게 있다면 그것을 사용할 수도 있다.)

생성한 git의 저장소 -url을 가져와 remote로 등록해준다.

$ git remote add origin -url

해당 명령어는 git remote add <원격저장소이름> <주소> 형식으로 원격 기본적인 원격 저장소 이름은 origin으로 설정되어 있다.
다른 저장소 이름으로 변경해도 상관 없다.

로컬 저장소에 등록하기

처음 깃을 사용하게 되면 이부분이 가장 먼저 혼동하게 된다.
우리는 파일에서 코드를 작성하고 나면 저장하게 된다.

여기서 저장은 어떤 의미일까?

저장 : 파일의 변경 내용을 해당 파일에 적용하는 것

그렇다면 우리는 저장하는 것으로, 로컬 저장소(Local Repository)에 그 내용이 적용되었다고 할 수 있을까?
그렇지 않다.

로컬 저장소는 실제로 파일의 변화 내용을 바로 적용하지 못한다.
저장소에 해당 파일의 변경을 다시 인지 시키고 그 내용을 적용해주는 과정이 필요하다.

한마디로, 내 컴퓨터는 파일이 저장된 걸 알지만, git이라는 프로그램은 내 파일이 적용된걸 모르기 때문에 그 사실을 알려주어야 한다고 볼 수 있다.

$ git add . //git에 변경된 모든 파일을 적용할 것이다.
$ git commit -m "init git" // git에 파일 적용 내용에 대한 간단한 코멘트를 입력해 적용한다.

원격 저장소에 적용하기

이제 로컬 저장소에 저장된 내용을 원격 저장소에 적용하면,

$ git push origin main

origin으로 설정된 원격 저장소에 main 브랜치의 내용을 적용하도록 실행한다.
이러한 과정이 가장 기본적인 git 사용 방법이다.

git 명령어

  1. 초기화
$ git init

해당 디렉토리에 깃을 적용한다고 명령하는 단계

  1. 설정
$ git config --global user.name

지금 피시에 적용된 사용자 정보를 읽어온다. 이 밖에도 깃에 설정되어있는 정보들을 알 수 있다.

  1. 커밋
$ git commit -m <commit messege>

그림처럼 로컬에 작업중이던 브랜치에 새 커밋이 추가된다.

$ git commit --amend

현재 위치의 커밋 로그를 이전 커밋과 같은 내용으로 변경하여 저장하게 된다.

  1. 브랜치
$ git branch ...

브랜치와 관련된 각종 명령어가 있다. 브랜치의 commit 노드를 변경하거나, 새로운 브랜치를 생성하는 것도 가능하다.

  1. 체크아웃
$ git checkout <branch 이름>

타깃 브랜치로 작업하는 곳을 변경할 때 사용한다.

  1. rebase
$ git rebase <to> <from>

from 브랜치를 to에 리베이스 한다. to는 브랜치를 입력하면 해당 브랜치 해드로 적용되고, commit hash를 적용할 수도 있다.
to에 해당되는 로그 이후로 다른 로그들을 전부 새로 작성한다. 때문에 commit 내용은 같지만 해시 값이 전부 변경된다.
7. tag

$ git tag <tagName> <commit hash>?

특정 커밋에 태그네임을 부여할 수 있다. 없는경우 현재 커밋에 태그가 설정 된다.

  1. dscribe
$ git decribe <commit hash | branchName>

브랜치 명이나 특정 커밋의 정보를 읽어 올 수 있다.

output

<tagName>_<distance>_g<commit hash>

tagName : 가장 가까운 태그네임
distance : 해당 태그까지의 거리
commit hash : 현재 조사중인 커밋 hash값

Example

  1. 다른 사람의 repository를 받아서 작업하고 싶을 때
    오픈소스의 contirubutor가 된다던지.. 혹은, 프로젝트에서 특정 기능을 구현해야 한다던지 할 때 이다.
$ mkdir myFeature

먼저 디렉토리 생성

// github fork someRepo

다른사람의 레포지토리를 fork해서 내 원격저장소에도 똑같은 복사본을 만들기

$ git clone <Forked Repo url>

내 원격저장소에 복사된 다른사람의 레포지토리를 로컬 저장소에 clone

$ git checkout -b myFeature

새 브랜치(myFeature)를 생성하고 해당 브랜치로 이동

// update task at local...

새로운 기능 개발

$ git add . 

변경된 사항 저장하도록 파일 등록

$ git commit -m "feature"

변경된 사항에 "feature"라는 설명과 함께 로컬 저장소에 저장

$ git merge myFeature master

마스터 브랜치에 myFeature에서 변동된 내용을 적용

$ git push origin master

마스터 브랜치의 원격 저장소를 로컬 저장소와 동기화

// github Full Request (FR)

깃헙에서 해당 해당 레포를 full Request 요청 해서 변동사항 반영 요청하기

  1. 다른 사람이 작업한 내용을 내 레포지토리에도 적용하고 싶을 때
    한개의 레포지토리를 공용으로 사용하는 경우가 있을 수 있다. (회사에서 프로젝트 Repo를 여러명이 공유하는 형식)
    그렇다면, 내가 휴가 다녀온 사이에 개발된 내용을 내 로컬에 어떻게 적용할 수 있을까?
$ git pull

해당 명령어면 모든 원격 저장소 브랜치의 변동사항이 내 로컬 저장소에 적용된다.

한 가지 브랜치의 내용을 반영하기 위해서는

$ git pull origin master

origin이라는 이름의 원격 저장소에서 master 브랜치의 변경 사항을 로컬에서 작업중인 현재 브랜치와 진행상태를 맞추게 된다.

merge와 rebase

우리는git pull을 하게 되면 git fetch; git merge를 하게 된다고 알고 있다.
그렇다면, git pull --rebase의 결과와 어떻게 차이 날까?

두 가지의 결과는 차이가 없다. 하지만 commit log에서 차이가 발생한다.

  1. merge를 하는경우
    두 개의 커밋이 독립적으로 존재하며, 원격으로 받아온 내용과 로컬의 내용을 합쳐서 적용하고 새로운 커밋 로그를 생성한다.

  2. rebase를 하는경우
    가지고온 commit list의 해시를 변경하여 작업중인 브랜치의 해드에 붙인다.

reference

Git을 배우는 게임

0개의 댓글