상대참조로 하나의 지점에서 다른지점에 도달해 작업을 할 수 있다.
^
main^
은 main의 부모,main^^
은 main의 조부모를 의미한다.만약 main의 부모를 checkout 할때는
git checkout main^
을 실행하면 된다. (커밋도 checkout의 대상이 될 수 있음)
~<num>
상대참조를 사용하는 일반적인 예시중 하나는 브랜치를 옮기는것!
-f
옵션을 사용해서 브랜치를 특정 커밋에 직접적으로 재지정 할 수 있다.
git branch -f main HEAD~3
이런식으로...
위의 명령어는 강제로 main브랜치를 HEAD에서 세번 뒤로 옮긴거임
그러니깐
이 상황에서
이렇게 main브랜치가 옮겨진다!
예시를 하나 더 보면
이 브랜치들을 두번째 사진과 똑같이 옮기려면
BEFORE :
AFTER :
bugFix를 맨 위로 옮기기
main을 C6으로 옮기기
HEAD를 C1으로 옮기기
git에서 변경한 내용을 되돌리는 방법은 크게
1. git reset
2. git revert
그런데 각자의 로컬 브랜치에서는 reset을 사용할 수 있는데, 다른사람이 작업하는 리모트 브랜치에서는 쓸 수 없다.
git revert
를 써야한다.reset과의 차이를 보면 reset은 이전의 커밋으로 돌아가는 반면,
revert는 새로운 커밋이 생긴다. 새로생긴 커밋은 그 이전의 커밋과 완전히 반대되는 내용이다!!
다른 브랜치에서 특정 커밋을 복사하여 현재 브랜치로 가져올 수 있다.
git cherry-pick <Commit1><Commit2><...>
위 명령을 실행하게 되면 cherry-pick 뒤에 적은 순서대로 가져와진다!
cherry-pick을 사용하는 경우는
1. 특정 브랜치에 잘못 추가한 커밋을 올바른 브랜치로 옮기려고 할 때나
2. 다른 브랜치의 커밋을 현재 브랜치에도 추가하고 싶을때
이다.
체리픽은 원하는 커밋이 무엇인지 알때 유용하다!
하지만 원하는 커밋을 모르는 상황에서는 인터렉티브 리베이스를 사용하면 된다!
인터렉티브 리베이스를 사용하는 방법은
rebase
명령어 뒤에 -i
를 붙여주면 된다.
이 옵션을 추가해서 명령을 실행하게 되면 git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 텍스트 편집기텍스트 편집기를 띄운다.
이를 통해 할수있는것
1. 적용할 커밋의 순서를 바꿀수 있다.
2. 원하지 않은 커밋들을 뺄 수 있다.(pick)
3. 커밋을 합칠 수 있다.(squash)
이 글의 내용은 이론적인내용이 전부이지만
코드를 쳐보면서 연습해보고 싶으면 여기 들어가서 실제로 코드를 작성해보면서 공부할 수 있어유
참고
https://backlog.com/git-tutorial/kr/intro/intro1_1.html
https://learngitbranching.js.org/?locale=ko