본문 바로가기

개발👩‍💻/git

git: 로그 상대 참조 (^, ~)

728x90

로그를 일일히 찾아 입력하는 불편함을 줄여주기 위해 상대 참조 연산자를 통해 접근한다.

 

~ (틸드)와 ^(캐럿)을 통해 접근할 수 있다.

 

HEAD(현재 가리키고 있는 로그 위치)로 할수도 있고, 특정 브랜치로 할 수도 있다.

 

 

~와 ^의 차이

둘 다 부모로 접근한다는 개념은 같으나 사용하는 곳이 다르다

 

예를들어

HEAD^와 HEAD~는 둘다 현재 HEAD가 가리키고 있는 로그에서 앞단계(부모)를 이동하는 것이다.

 

그러나 사용하는 방법에 따라 둘의 차이가 있는데,

 

  • HEAD^2: 어떤 브랜치를 선택할래? 
    • tree-way merge한 브랜치에서 그 전 브랜치로 이동할 때 사용된다. 
    • 첫번째 부모는 main이고, 두번째부모는 main에 Merge된 다른 branch이다.
    • 그래서 결국 HEAD^는 main브랜치 commit으로, HEAD^2는 두번째 부모인 feature branch commit으로 이동하게 된다
  • HEAD^^
    • 부모의 부모로 이동
    • 즉, HEAD가 가리키고 있는 Log에서 2번 떨어진 곳의 log로 HEAD이동
    • HEAD^2와는 전혀 다르다
      • ^^는 선형 뒤로가기고,
      • ^2는 두개의 병렬 브랜치인 로그에서 둘 중 하나를 선택하는 것이다.
    • 하지만 이렇게 선형으로 뒤로 가기위해서 ^^^^^^를 연속해서 사용하기엔 너무 비효율적이다
    • 그래서 HEAD~num을 사용한다
  • HEAD~2
    • 부모의 부모로 이동
    • HEAD^^와 똑같다.
      • 만약 HEAD~3이라면 HEAD^^^와 같음
    • ~ 뒤에 숫자만큼 선형으로 뒤로 이동한다.
반응형