문준영
새벽 코딩
문준영
전체 방문자
오늘
어제
  • 분류 전체보기
    • 웹 개발
    • JAVA
      • 기본 문법 내용 정리
      • 함수 내용 정리
      • 쉽게 배우는 자바 프로그래밍 문제 풀이
    • HTML
      • HTML
      • CSS
      • 문제풀이
    • JavaScript
    • MYSQL
    • C
      • 기본 문법 내용 정리
      • 백준 알고리즘 (c언어)
      • 자료구조
    • Python
      • 참고 알고리즘
      • 기본 문법 내용 정리
      • 자료구조 내용 정리
      • 백준 알고리즘 (파이썬)
    • 깃허브
    • 멀티잇 풀스택

티스토리

hELLO · Designed By 정상우.
문준영

새벽 코딩

깃 문법 정리
깃허브

깃 문법 정리

2023. 7. 7. 17:41

 

정리

 

작은 단위로 코드를 수정한 후 커밋을 하는 것이 오류를 검토,수정하기 좋다.

 

원격 저장소에 푸시를 하려면  충돌 방지를 위해 자신의 로컬 저장소를 최신 상태로 유지해야 한다.

권장 순서 pull -> coding -> commit -> pull -> push

 

깃을 안정적으로 사용하려면 워킹 디렉토리를 항상 깨끗하게 유지 관리해야 한다.

워킹 디렉토리를 정리하는 방법은 수정된 코드를 스테이지하고, 최종 스냅샷을 생성하여 커밋해야 하며, 커밋이 불가할 때는 스태시를 적용하여야 한다.

 

병합 충돌을 최소화하고 예방하려면 master 브랜치 내용을 자주 변경하여 병합해라.

충돌을 최소화 하고 예방할 수 있다.

 

커밋 복원 시 저장소를 공유하지 않으면 reset으로 복원하고, 공유 시 revert를 사용해라.

저장소 공유 시 커밋 기록이 깨질수 있으므로 리버트를 사용하여 코드 충돌을 최소화해야 한다.

 

 

깃 기본 개념

 

깃의 범위

 

깃은 크게 작업을 하는 공간(working), 임시로 저장하는 공간(stage), 실제로 저장하고 기록하는 공간(repository)로 나뉜다.

  • 워킹 디렉토리 : 작업을 하는 공간으로 실제 파일을 생성하고 수정하는 공간
    • untacked : 깃에게 추적되지 않은 상태 (새로 만들어진 파일)
    • tracked  : 추적 관리가 되고 있는 상태 
      • modified  : tracked 인 파일을 수정한 이후의 상태
      • unmodified : tracked 상태이면서 스테이지에서 한 번도 수정하지 않은 상태
  • 스테이지 : tracked된 파일을 관리하며 워킹 디렉토리와 레포지스토리 사이에 있는 임시 영역
    • stage  : 파일에 변화 없음
    • unstage  : 워킹 디렉토리와 레포지스토리 파일 내용에 차이가 있음
  • 레포지토리 : 파일이나 폴더를 저장해두는 저장소로 파일의 모든 변경 사항을 관리 및 저장하는 공간
    • 원격 저장소 : github 서버에 위치한 저장소로 다른 사람들과 코드를 공유하는 공간
    • 로컬 저장소 : 개인 소스코드를 만들거나 다른 사람의 코드를 불러오는 개인 공

 

 

브랜치

 

여러 개의 작업 공간을 만들기 위해 브랜치를 사용한다.

  • 브랜치 생성 시 분기 기준은 HEAD의 최종 커밋 포인터
  • HEAD 포인터 : 작업 중인 브랜치의 마지막 커밋 ID를 가리키는 참조 포인터
  • 업스트림 연결 : 기존 브랜치를 특정 원격 브랜치로 추적

 

 

스태시

git stash # 임시 저장
git stash pop # 저장 내용 반환

주로 현재 작업을 중단하고 다른 브랜치에 있는 코드를 수정할 때 사용하며 현재 작업을 임시로 저장하는 기능을 의미한다.

  • 스택 구조로 여러 번 실행하여 저장할 수 있음
  • 반환 시 현재 브랜치의 워킹 디렉토리와 자동 병합 됨
  • 스태시 충돌 예상 시 스태시용 브랜치를 하나 생성하는 것을 권장
  • 스태시 복원 후에도 스택 목록은 그대로 남아 있음

 

병합

 

분리된 브랜치를 한 브랜치로 합치는 작업을 병합이라 하며, 깃의 병합은 각 브랜치를 비교하여 자동 병합하는 형태이다.

  • Fast-Forward 병합 : 순차적인 커밋에 맞춰 병합을 처리하는 방식으로 주로 혼자 개발 시 사용

master 기준으로 브랜치 경로가 일직선으로 있는 것을 확인할 수 있다.
dev1 브랜치의 커밋들이 전부 master 브랜치로 병합된 걸 확인할 수 있음

병합 시 브랜치의 시작 위치가 최신 브랜치 커밋으로 이동 됨을 확인할 수 있음

 

  • 3-way 병합 : 분할 기준인 공통 커밋을 찾아 브랜치 병합을 처리하는 방식으로 주로 협업 시 사용

브랜치가 총 3개로 base에서 commit을 진행하여 분기한 것을 확인할 수 있다.
공통된 commit base를 기준으로 각 브랜치를 병합한 것을 확인할 수 있다. 브랜치가 총 3개라 하여 3-way 병합이라 함

 

리베이스

 

커밋의 트리 구조를 재배치하는 방법이다.

공통된 조상 부모를 찾아 두 브랜치를 합치는 병합과 달리 두 브랜치를 서로 비교하지 않고 순차적으로 커밋 병합을 하는 구조를 취함

기존 B 베이스에서 C 베이스로 변경하여 브랜치의 구조를 보다 더 단순한 형태로 변경함

  • 파생된 브랜치에서 원본 브랜치를 가져와 병합된다. (베이스에서 rebase를 수행하는 것이 아닌 파생 브랜치에서 rebase 수행)
  • 리베이스시 커밋의 위치를 재조정할 뿐 head 포인터를 옮겨주진 않으므로 fast-forwad 병합을 해줘야 함
  • 저장소 외부 공개 시 리베이스를 사용하지 않는 것이 원칙

 

몰랐던 용어

 

  • gitignore : git 버전관리에서 제외할 파일 목록을 지정한 파일
    • git add . : gitignore 파일에 있는 파일들을 제외하고 스테이지에 올림
    • git add * : gitignore 파일에 있는 파일을 포함해서 스테이지에 올림
  • head : 최종적인 커밋의 작업 위치, 기준이 되는 브랜
  • head^ : 현재 커밋의 상위 커밋 위치, head~: 현재 커밋의 하위 커밋 위치
    • ex) a <- b <-c (HEAD) <- d : HEAD는 c , HEAD^는 b를 의미, HEAD~는 d를 의미
  • snapshot : 변경된 파일의 전체를 저장하지 않고 파일의 일부분을 찾아 저장하는 방식
  • reset vs revert
    • reset : 특정 커밋으로 돌아간다. 과거의 사건들이 모두 사라진다.
    • revert : 특정 사건들을 잊은 채 특정 커밋으로 돌아간다. revert한 이력이 남는다.

 

 

기타

 

디렉터리 이동

cd 위치

워킹 디렉토리 청소, 추적되지않은 파일(Untracked files)을 찾아 삭제

git clean
git clean -f # 강제 삭제
git clean -n # 가상으로 처리 후 확인 요청

커밋 취소, HEAD 포인터를 특정 위치로 변경, 

git reset --hard 커밋ID

이전 커밋 내역 출력 reset --hard로 지운 파일 복원

git reflog

* reflog (이전 커밋 목록 확인) -> checkout (복원하고 싶은 커밋으로 체크아웃) -> branch (새로운 브랜치 생성)

 

 

 

commit  명령어

 

워킹 디렉토리파일을 스테이지 영역으로 등록, tracked 상태로 변경

git add 파일명

스테이지된 파일을 워킹 디렉토리 파일로 변경, untracked 상태로 변경

git rm --cached 파일명

commit 사용 이후 untracked 상태로 변경, 한 단계 전 commit으로 되돌림

git reset HEAD 파일명

파일 등록과 commit을 동시에 적용

git commit -a

파일 등록 및 commit 메세지 동시 적용

git commit -am

메시지가 없는 commit

git commit --allow-empty-message -m ""

수정된 파일 되돌리기

git checkout 수정파일명

파일 간 차이 목록 표시, 워킹 디렉토리와 스테이지 영역 간 변경 사항 비교

git diff
git diff head #최신 커밋과 변경 내용 비교

 

branch 명령어

 

브랜치 목록 출력

git branch
git branch -v # 상세 내용 확인

브랜치 생성

git branch 브랜치명 
git brach 브랜치명 커밋ID # 지정 커밋을 기준으로 브랜치 생성

브랜치 생성 및 체크아웃

git checkout -b 브랜치명

브랜치 해시 값 확인 (브랜치는 커밋의 해시를 기준으로 생성 됨)

git rev-parse 브랜치명

브랜치 간 이동

git checkout 브랜치명
git checkout --파일명 
git checkout - # 이전 브랜치로 이동

* 워킹 디렉토리에 커밋하지 않은 내용이 있으면 브랜치 변경 불가

 

브랜치 서버로 전달 (브랜치 -> 원격 저장소)

git push -u 원격저장소명 브랜치명
git push -u 원격저장소명 브랜치명:새로운브랜치명 #지정명으로 원격저장소에 저장

= 트래킹 브랜치와 업스트림 수동 설정  -u = --set-upstream

* 처음에는 원격 저장소 연결만으로 업스트림이 자동으로 설정되지 않기 때문에 수동으로 설정해야 함

 

브랜치 삭제

git branch -d 브랜치명
git branch -D 브랜치명 # 브랜치 강제 삭제

 

 

원격 저장 명령어

 

원격 저장소 목록 확인

git remote
git remote -v #별칭 및 url 확인

원격 저장소 생성

git remote add 원격저장소명 원격저장소URL

원격 저장소명 변경

git remote rename 변경전이름 변경후이름

원격 저장소 상세 내용 출력

git remote show 원격저장소명

원격 저장소 삭제

git remote rm 원격저장소명

원격 저장소로 파일 업로드

git push 원격저장소명 브랜치명

강제로 공동된 커밋 포인트 가져오기

git pull 원격저장소명 브랜치명  --allow-unrelated-histories

 

원격 저장소에서 내려받기(자동)

 

1.원격 저장소 복제

git clone 복제할URL

2. 원격 저장소의 내용을 가져와  최신 정보 자동 병합

git pull

 

원격 저장소에서 내려받기(수동)

 

1.원격 저장소의 내용을 수동으로 가져오기

git fetch

* pull 명령어와 달리 fetch는  내려받은 후 현재 브랜치와 자동으로 병합하지 않음

 

2. 수동 병합

git merge 원격저장소명/브랜치명
git merge 브랜치명 --edit # 커밋 메세지 추가
git merge --abort # 병합 취소

 

브랜치 리베이스

git rebase 원본 브랜치

리베이스 이용 시 충돌된 부분들을 단계적으로 해결하여 병합

git rebase --continue

커밋 묶기

git reset 커밋ID

 

출력 명령어

 

파일 목록 출력

ls

파일 목록 숨겨진 목록 포함  출력

ls -a

현재 디렉토리 경로 출력

pwd

 

임시 처리

 

임시 저장 , 현재 작업 중인 내용을 임시 스택 영역에 저장하여 워킹 디렉토리를 정리

git stash
git stash save # 여러 개 저장
git stash save "메세지" # 메세지 추가

스태시 목록 확인

git stash list

스태시와 워킹 디렉토리 차이 출력

git stash show
git stash show -p # 상세 출력

스태시 복원, 스태시에 임시 저장한 내용을 반환 (스택 형식), 저장된 스택은 자동 삭제

git stash pop

스태시가 적용된 스태시용 브랜치 생성 , 저장된 스택은 자동 삭제

git stash branch 브랜치명

스태시 복원, 저장된 스택 변동 없음

git stash apply stash@{번호}

스태시 삭제, 스택형식

git stash drop

 

 

생성 명령어

 

폴더 생성

mkdir 폴더명

저장소 초기화

git init

저장소 복제

git clone 원격저장소url 새폴더명

파일명 변경

git mv 파일명 새로운파일명

문자열을 포함한 파일 생성

echo "메세지" >> 파일명

파일 삭제

git rm 파일명

 

복귀 명령어

 

지정 커밋으로 복원

  • 스테이지 영역을 포함한 상태로 복원 (commit 하기 직전에 단계로 복원-> 단순한 HEAD 위치 이동)
git reset --soft 커밋ID
  • 기본 옵션 값, 워킹 디렉토리 영역을 포함한 상태로 복원 (add -> commit을 해야 함)
git reset 커밋ID
git reset --mixed 커밋ID
  • 실제 파일이 삭제된 이전 상태로 복원 (커밋 이후의 모든 내용이 삭제)
git reset --hard 커밋ID

 

커밋 되돌리기 (기존 커밋을 남겨 두고 원하는 시점에 커밋으로 이동)

git revert 커밋ID

병합 취소

git reset --merge 커밋ID

 

 

 

관리 명령어

 

상태 메세지 확인

git status

파일 관리 목록에서 제거 , 파일 작성 시 저장소 폴더의 최상위 디렉토리에 위치해야 함

vim .gitignore

로그 기록 확인

git log
git log --graph --all # 브랜치의 흐름도 같이 출력
git log --stat # 히스토리도 같이 출력

 

'깃허브' 카테고리의 다른 글

최종 정리  (0) 2022.07.08
깃허브 협업  (0) 2022.06.24
깃허브 백업  (0) 2022.06.22
브랜치  (0) 2022.06.20
버전 관리  (0) 2022.06.14
    '깃허브' 카테고리의 다른 글
    • 최종 정리
    • 깃허브 협업
    • 깃허브 백업
    • 브랜치
    문준영
    문준영
    공부한 내용 정리!

    티스토리툴바