git, gist

adkm12·2024년 7월 15일

git과 GitHub gist


git : 분산 버전 관리 시스템


git의 장점

  • 소스코드를 주고받을 필요 없이 같은 파일을 여러명이 동시에 개발할 수 있다.
  • 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있다.
  • 중앙 저장소가 날라가도 로컬 저장소를 이용해 복구할 수 있다.

git 필수 명령어

1. add

  • git add는 작업 디렉토리상의 변경 내용을 스테이징 영역에 추가하기 위해 사용하는 명령어
  • untracked files, 새로 추가된 파일(git의 관리대상에 포함되지 않은 파일들)을 git add를 통해 changes to be commited(커밋할 변경사항)의 새 파일로 변경된다.
  • git의 관리대상에 포함시키는 단계
  • git add .를 통해 한꺼번에 add 할 수 있다.
  • git rm --cached 파일명을 통해 add한 파일을 삭제할 수 있다.

2. commit

  • 코드 변경 사항을 저장소에 기록함으로써 프로젝트의 특정 시점을 안전하게 저장하고, 필요할때 언제든지 그 시점으로 돌아갈 수 있다.
  • commit은 해시값, 저자, 메세지로 이루어져 있다. 이러한 요소들로 해당 커밋에 대해 누가 변경했는지, 변경사항이 뭔지 알 수 있다.
  • git commit -m "커밋 메세지"를 통해 현재 변경사항을 커밋 메세지와 함께 기록
  • git commit -am "커밋 메세지"를 통해 git addgit commmit -m 기능을 동시에 할 수 있다.

staging Area

그림출처 : https://iseunghan.tistory.com/322

  • Working Directory에서 git add하면 Staging Area로 이동되고 이후 commit 으로 Repository에 기록된다.
  • Untracked file > Unmodified > Modified > Staged 순으로 파일이 관리되고
  • Staged file을 커밋하면 Unmodified 상태가 된다.
  • git diff --staged등의 명령어로 Staging Area를 확인할 수 있다.
  • stage Area의 용도
    • 일부분만 커밋
    • 충돌 해결 : 필요한 만큼만 충돌을 해소하고 그부분만 add하여 커밋할 수 있다.
    • 커밋 다시하기 : commit --amend 명령으로 커밋을 고칠 수 있다.

3. branch

  • git에서 특정 커밋을 가리키는 포인터
  • main 브랜치에서 작업하지 않고 각 기능별로 쪼개서 병렬적으로 개발 할수 있게 해준다.
  • 원래 코드에 영향을 주지 않고 개발할 수 있다.
  • git branch를 통해 로컬 저장소에 현재 어떤 branch들이 있는지 확인
  • git status를 사용해서 현재 내가 어떤 branch에 있는지 확인
  • git branch 브랜치이름으로 브랜치 생성
  • git checkout 브랜치이름으로 브랜치간의 이동
    • HEAD : 내가 위치해 있는 커밋을 가리키는 식별자
  • git branch -d 브랜치이름으로 브랜치 삭제

4. push

  • 커밋했던 내용들을 원격저장소(gitHub)으로 업로드 한다.
  • 기본명령어 : git push 저장소명 브랜치명
    • 브랜치에 남겨놓은 코드 변경 이력을 저장소에 push
  • 로컬에서 새롭게 만든 브랜치에 git push 명령어를 사용하면 이런 오류가 발생한다.
$ git push
fatal: The current branch my-feature has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin my-feature

To have this happen automatically for branches without a tracking
upstream, see 'push.default' in 'git help config'.
  • git push 명령어 뒤에 저장소명과 브랜치명을 적시 않아서 생기는 오류

  • -u옵션이나 --set-upstream을 사용하면 최초에 한 번만 저장소명과 브랜치 명을 입력하고 이후에는 모든 인자를 생략 할 수 있다.

  • 여러 브랜치를 넘나들면서 작업하는 경우

    • git config --global push.default currentpush.default 설정을 current로 설정하면 브랜치를 이동하며 push해도 항상 현재 브랜치를 기준으로 push명령어가 작동한다.

    5. pull & fetch

  • 원격 저장소의 프로젝트를 로컬 저장소로 가져오는 명령어

  • pull은 프로젝트를 가져올때 원격 저장소의 파일에 맞춰 로컬 저장소의 버전을 올린다(merge)

  • fetch는 파일을 가져오기만 하고 merge는 하지 않는다.

6. fork & clone

  • 둘다 원본저장소의 파일을 그대로 복제하는 기능

  • fork는 gitHub내의 저장소로 원본 저장소의 파일을 가져옴

    • 가져오려는 원본저장소와 연결되어 있어서 원본저장소에 새롭게 커밋, 수정되면 fetchpull을 통해서 나의 저장소에 적용시킬 수 있다.
    • 나의 수정사항을 원본 저장소의 관리자에게 pull request를 요청해서 승인이 되면 적용 된다.
    • call by reference 느낌
  • clone은 내 로컬저장소로 원본 저장소의 파일을 가져옴

    • 원본과의 연결이 끊긴 복사본

    • 로컬저장소에서 새로 커밋할 것이 있어도 권한이 없으면 원본 저장소에 push할 수 없다.

    • 원본 저장소의 commit기록, 로그도 알 수 없다.

    • call by value 느낌

7. pull request

  1. 원본 저장소에서 내 원격 저장소로 fork
  2. 내 로컬 저장소로 clone 해서 수정, 커밋
  3. 내 원격 저장소로 push
  4. 원본저장소로 pull request 요청

git 오류 해결

  1. failed to push some refs to 오류
  • 원격저장소에 로컬저장소에 없는 파일이 있을때 내 파일을 push하면 발생하는 오류
  • 원격저장소를 pull한 다음 push하면 된다.

0개의 댓글