Git교과서] 6.7 ~ 6.11

qqEQ·2021년 8월 22일
0

6.7 HEAD 포인터

6.7.1 마지막 커밋

깃은 마지막 커밋 정보를 기반으로 새로운 커밋을 생성한다.
마지막 커밋은 새로운 커밋의 부모 커밋이다.
HEAD는 작업중인 브랜치의 마지막 커밋 ID를 가리키는 참조포인터이다.

6.7.2 브랜치 HEAD

브랜치를 이동 시 HEAD포인트도 이동한다
브랜치가 여러개면 HEAD포인트도 여러개이다.
(각각의 브랜치마다 마지막 커밋이 다르기 때문)

6.7.4 상대적 위치

~와 ^를 이용해서 현재 HEAD가 가리키고 있는 커밋으로부터 이전으로 이동할 수 있음

$ git checkout HEAD~2
// 2칸 전 커밋으로 이동

$ git checkout -
// 직전으로 HEAD 이동

$ git checkout HEAD~3
// 코드 수정..
$ git switch -c footer2 // 수정한 코드로 footer2라는 브랜치를 만들고 커밋함.

6.7.5 AHEAD, BHEAD

리모트를 연결했다면 로컬저장소의 HEAD와 원격저장소의 HEAD가 따로 존재한다.

AHEAD : 서버로 전송되지 않은 로컬커밋이 존재하는것
BHEAD : 로컬 저장소로 내려 받지 않은 커밋이 존재하는것

6.8 생성과 이동

브랜치 생성과 이동은 별개의 동작이다
(동시에 실행하려면 별도의 명령어를 입력해야한다.)

6.8.1 자동이동옵션

-b 옵션을 checkout시 입력하면 생성과 이동이 동시에 이루어짐

$ git checkout -b 새_브랜치이름
$ git checkout -b hotfix

6.8.2 커밋 이동

브랜치는 특정 커밋에 별명을 부여한것과 동일하다
(브랜치 이름은 커밋 해시키와 동일)
즉, 브랜치 이동시 브랜치 이름뿐만 아니라 커밋 해시키를 사용할 수 있다.

$ git branch -v
  footer  fb37081 footer 수정
  footer2 0e92f8e HEAD~2 후 코드 수정 및 커밋
  hotfix  5c05b9d 6.7.3 추가
* master  aa93db8 6.8.2

$ git checkout 커밋해시키

6.8.3 HEAD를 활용한 이동

$ git checkout HEAD~1 // 한 단계 전 커밋
$ git checkout HEAD~5 // 5단계 전 커밋

6.8.4 돌아오기

$ git checkout - //직전에 HEAD가 가리키던 커밋으로 돌아옴

// 한단계씩 여러번 돌아오는것도 가능하지만 브랜치이름을 직접 입력하는게 더 편함

6.9 원격 브랜치

6.9.1 리모트 브랜치

리모트 브랜치 : 별칭/브랜치이름

6.9.3 브랜치 추적

브랜치는 특정 커밋 해시 값을 가리키는 포인터

-> 리모트 브랜치는 원격 저장소의 브랜치를 가리키는 포인터이며 원격 저장소의 브랜치를 가리키는것을 브랜치 추적이라고 한다.
다른 용어로 추적브랜치를 트래킹 브랜치라고 함
트래킹브랜치는 원격브랜치를 가리키는 북마크와 같음
추적브랜치는 원격브랜치의 마지막 커밋 해시값을 가리킴
정보는 .git/refs에 존재

업&다운스트림

6.9.4 브랜치 업로드

git remote show origin : remote 중 origin에 대한 정보 보기

$ git push origin master // remote 중 origin에 master브랜치 push하기

로컬저장소에는 4개의 브랜치가 있지만 깃허브에는 master브랜치 하나뿐이다.
원격저장소에 리모트 브랜치를 생성하려면 로컬 저장소에서 전송명령을 실행해야한다.

  • hotfix브랜치를 원격저장소에 등록하기
$ git branch -v
  footer  fb37081 footer 수정
  footer2 0e92f8e HEAD~2 후 코드 수정 및 커밋
  hotfix  5c05b9d 6.7.3 추가
* master  89a9f47 add 6.9.4

$ git push origin hotfix // hotfix브랜치 올리기

6.9.5 이름이 다른 브랜치

로컬 저장소와 원격 저장소의 브랜치이름을 서로 다르게 지정할 수 있다.

$ git push origin hotfix:새로운_브랜치_이름 // 원격저장소의 브랜치 이름 바꿔서 올리기

// 예 : footer브랜치를 깃허브에는 function이라는 이름의 브랜치로 올리고 싶을때
//  브랜치명:사용할브랜치명 사용
$ git push -u origin footer:function
// -u : --set-upstream

6.9.6 업스트림 트래킹

브랜치의 추적을 다르게 표현것.
트래킹브랜치(업스트림)은 리모트 브랜치와 로컬 브랜치를 연결하는 다리 역할을 함
로컬저장소와 연결된 원격저장소의 브랜치 목록 확인

// remote에 연결된것만 보기
git branch -r

// remote와 local 둘 다 보기
git branch -a

// 복제한 저장소의 트래킹 브랜치 보기
git branch -vv

  1. clone] repository로 다른 경로에 복제
  2. local] 저장소에서 git push -u origin footer2:function
  3. clone] git checkout --track origin/function
  4. clone] 코드 수정 후 git push(git push만 입력)
  5. local] git checkout footer2; git pull
  6. 클론에서 수정된 코드 받아오기 끝

6.9.7 원격 브랜치 복사

원격에는 있고 로컬에는 없는 브랜치를 로컬에 저장
git checkout -b 새이름 origion/브랜치이름

6.9.8 업스트림 연결

기존에 있는 브랜치를 업스트림으로 연결 가능.

6.10 브랜치 전송

로컬 저장소의 브랜치를 원격저장소로 전송하는 다른 방법

6.10.2 브랜치 페치

리모트 브랜치 페치되면 깃은 단순히 원격저장소별칭/브랜치 포인터만 생성합니다.

$ git merge 원격저장소/브랜치이름

//병합없이 테스트만 하고싶을때
$ gti checkout -b 임시브랜치이름 origin/브랜치이름

`

6.11 브랜치 삭제

브랜치삭제는 해당 브랜치 내용과 커밋을 모두삭제하는것.
현재 자신이 있는 브랜치는 삭제할 수 없음

현재위치 : bug
$ git branch -d bug // (현재 자신이 있는 브랜치는 삭제할 수 없음)

6.11/1 일반적 삭제방법

$ git branch -d 브랜치이름

$ git branch -d footer

6.11.2 강제삭제

워킹디렉토리 또는 스테이지에 추가 커밋 작업이 남아있다면 일반적인 방법으로는 프랜치를 삭제할 수 없음
이럴때는 강제로 삭제하여야하는데

소문자 -d가 아닌
대문자 -D를 입력하면 강제로 브랜치 삭제가능

6.11.4 리모트 브랜치 삭제 방법

$ git push origin --delete
profile
큐큐익규

0개의 댓글

관련 채용 정보