본문 바로가기
Github

6. HEAD / fetch와 pull

by 이쟝 2022. 3. 31.
본 포스팅은 제대로 파는 Git & GitHub - by 얄코님의 인프런영상을 학습하고 정리한 내용입니다.

Git에서의 HEAD란 ?
현재 속한 브랜치의 가장 최신 커밋(해당 브랜치 가지의 맨 끝 단위)
switchbranch 이동하기(git switch (브랜치 명))

 

 

HEAD 이동하기 

git checkout HEAD^  // git checkout HEAD~

시간 순은 유지하되(커밋된 정보는 유지) 파일의 상태(HEAD)만 과거로 돌리는 것

  • 또는 ~ : 갯수만큼 이전으로 이동(한 단계만 뒤로 가고 싶으면 ^ ~를 한 개만)
    • git checkout HEAD~~ / git checkout HEAD^5 / git checkout 커밋해시

 

(이동) 한 단계 되돌리기(ctrl + z)

git checkout -

 

1. HEAD 실습

현재 alpha-branch에서 HEAD는 alpha 2nd commit이다.
한 단계 뒤로 가고 싶다면
git checkout HEAD~ / git checkout HEAD^ / git checkout ‘alpha 1st commit의 해시코드’

 

HEAD가 한 단계 전으로 돌아간 것을 볼 수 있다. 다시 뒤로 되돌리고 싶다면
git checkout –

 


1. *이전으로 checkout된 상태에서 sourceTree로 HEAD상태 확인*

익명의 브랜치에 위치함을 알 수 있음(현재 브랜치가 브랜치 이름이 아닌 코드로 되어있는 경우)
익명의 브랜치에서 새로운 브랜치를 만들고 커밋할 수 있다.
현재 beta-branch에서 head는 beta 2nd commit에 있다.

git checkout HEAD^1 // 한 단계 뒤로가기

현재 익명의 브랜치에 위치하고 있다. (HEAD가 beta 1st에 위치한다.)

 

이 위치(현재 익명의 브랜치)에서 새로운 브랜치 생성과 동시에 그 브랜치로 이동하기

git swtich -c '새로운 브랜치 명'

beta 1st 에서 gamma-branch가 생겨난 것을 알 수 있다.

파일을 변경하고 새로운 변경사항을 커밋하기

git commit -am "gamma 1st commit"

beta 1st 에서 gamma-branch의 커밋결과가 생겨난 것을 알 수 있다.


2. HEAD를 사용해 RESET 하기

git reset HEAD(원하는 단계)

HEAD의 현재 위치(delta-branch)

$git reset --hard HEAD^^
 
$git reset HEAD^^ ($git reset –mixed HEAD^^와 동일)

2단계 뒤로 가고, 뒤로 가면서 커밋 내용까지 삭제되었다.
 
2단계 뒤로 갔지만, 파일에는 3rd, 4th에서 했었던 것들이 삭제되지 않았다.
(
현재 Working directory에 위치, git add . 를 하면 Staging area로 이동)

2022.03.31 - [Gi&Github] - 5. Git의 3가지 분류 공간과 삭제와 이동 / RESET

 


2. fetch와 pull 

fetch pull
원격 저장소의 최신 커밋을 로컬로 가져오기만 함
(pull하기 전 내역만 보고 싶을 때 사용)
원격 저장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase (fetch의 과정을 포함)

1. fetch한 내역 보기 ( 적용 전: pull(다운로드) 전 )

1. 원격에서 커밋 추가 하기 

원격의 main 브랜치에 커밋 추가 (파일에 fetch : this 추가하고 커밋메시지: Add fetch : this)
git checkout origin/main

원격에서 한 커밋이 로컬에서도 나오는 것을 볼 수 있다.

pull 한 것이 아니기 떄문에  mian 브랜치로 이동하게 되면 fetch : this가 보이지 않는다. 
git pull을 하게 되면 원격에서 한 커밋사항이 pull이 되면서 로컬에서도 그 commit이 적용된다. 

 

로컬 + 원격이 병합


2. 원격에서 새 브랜치를 생성하고 커밋 추가 하기

원격에서 새로운 브랜치 생성(new-branch) 후 커밋 추가 (파일에 new : branch 추가하고 커밋메시지: Add new branch)

 

git checkout origin/(브랜치 명)

pull 한 것이 아니기 떄문에  mian 브랜치로 이동하게 되면 new : branch 가 보이지 않는다.
git switch -t origin/(브랜치 명) 을 하게 되면 원격에서 생긴 브랜치와 변경된 사항이 한 번에 로컬에도 적용된다.