[Git - ⑧] Git의 강점 + 3가지 공간 + 삭제 및 이동 + reset 옵션
[Git - ⑧] Git의 강점 + 3가지 공간 + 삭제 및 이동 + reset 옵션
[Git - ⑦] Github 연동 + push, pull + branch [Git - ⑦] Github 연동 + push, pull + branch [Git - ⑥] 충돌 해결 + SourceTree에서 사용 [Git - ⑥] 충돌 해결 + SourceTree에서 사용 [Git - ⑤] branch + merge, rebase [Git - ⑤] branch +
soohykeee.tistory.com
Git의 HEAD
Git의 HEAD는 현재 속한 브랜치의 가장 최신 커밋을 의미한다. 위에서 보면, delta-branch는 main에서 뻗어나온 브랜치이다. 그렇기에 delta-brach의 헤더는 저기 보이는 가장 오른쪽이고, main의 브랜치는 파란색으로 표시된 것이기에 왼쪽에서 3번째에 위치한 곳이 main의 헤더이다.
그전에도 해보았지만, branch간 이동하는 것은 git switch (브랜치명) 으로 할 수 있다.
main 으로 switch 했을 때, HEAD를 살펴보게 되면 위치를 확인할 수 있다.
delta-branch 로 switch 했을 때도 HEAD위치로 옮겨간것을 확인할 수 있다.
이제 이러한 위치에서 git checkout HEAD^ 명령어를 입력하게 된다면 해당 HEAD 위치에서 한단계 아래로 내려가게 된다. 즉, delta 2nd commit 으로 이동하게 되는 것이다.
git checkout HEAD^ = git checkout HEAD~ -> 둘다 같은 의미이다. ^이나 ~를 더 많이 적어주게 되면 갯수만큼 이동하게 된다.
git checkout - 해당 명령어를 입력하게 된다면 Ctrl + z 와 비슷하게, 한 단계 되돌리게 된다.
예제를 통해 알아보면 다음과 같다. git checkout HEAD^^ 를 입력해줬기에 해당 HEAD는 delta 1st commit으로 이동하게 된다.
또한 HEAD는 앞서 설명하기를, 해당 branch의 가장 최신 커밋으로 위치한다 했는데, 보게되면 delta-branch의 중간에 위치하게 된다. 이거는 git branch를 통해서 보면, 가상의 branch를 생성하여 해당 branch의 가장 최신 커밋으로 설정해준 것이다.
위에서 한것처럼 beta-brach로 switch한 후, checkout을 통해 한단계 뒤로 이동한다음 거기서 새로운 branch를 생성해주는 예제를 해보자.
아래에서 보이는 것 처럼 해당 위치에서 branch를 git switch -c gamma-branch 명령어를 사용해서 생성해줄 것이다.
위에서 보이는 해당 위치에서 gamma-branch를 생성해줬다. 여기서 새로 commit을 해준 후, branch가 뻗어나가는 것을 확안해보곘다.
File을 적당하게 수정해준 후, git commit -am 'gamma 1st commit' 해당 명령어를 입력해주었다.
HEAD를 사용하여 reset하는 방법은 다음과 같다.
git reset HEAD(원하는 단계) (옵션)
Fetch, Pull
- fetch : 원격 저장소의 최신 커밋을 로컬로 가져오기만 한다.
- pull : 원격 저장소의 최신 커밋을 로컬로 가져와 merge 또는 rebase
pull은 fetch 과정을 포함하고 있다. 만약 원격 저장소의 변화를 fetch로 받아왔을 때, merge나 rebase할거면 pull하면 된다.
위의 예제 진행을 위해서 원격저장소에서 tigers.yaml 파일에 fetch: this 를 추가해주었다.
origin/main에서의 변경사항을 우선 pull 해주기 전, 받아오기 위해서 fetch 만을 진행하면 다음과 같다.
그 다음 checkout origin/main 으로 옮겨가면 방금 전, 원격 저장소에서 tigers.yaml에서 수정해주었던 fetch: this를 볼 수 있다.
해당 원격 저장소의 변경사항이 이상이 없고, 로컬에 pull 해도 상관없을 것 같은지 확인한 후에,
git switch main으로 로컬로 넘어온 후, git pull 로 원격 저장소의 내용을 받아주면 된다.
이번에는 원격에서 새로운 브랜치 생성 후, fetch와 pull해오는 예제를 살펴보겠다.
원격에서 new-branch 생성 후, tigers.yaml 에 new: branch 를 추가해주었다.
git fetch 를 진행해주면, 원격에서 로컬로 새로운 origin/new-branch를 생성한 것을 확인할 수 있다. 아직 원격 new-branch에 대해 pull 하진 않고, fetch만 받아온 것이다. 해당 브랜치 또한 위에서 한 것 처럼 origint/new-branch로 checkout한 뒤, 문제가 없는지 확인한 후에 로컬에 pull 해주면 된다.
우선 로컬에 new-branch 명을 새로 생성해주기 위해서 git switch -t origin/new-branch 를 입력해주었다.
그렇게 되면 로컬에 new-branch가 생성이 되고 origin/new-branch의 내용이 생성된 것을 확인할 수 있다.