[Git] 좀 더 깊게 알아보자

do_large·2021년 3월 10일
0

Git

목록 보기
2/4
post-thumbnail

Git의 상대참조

상대참조로 하나의 지점에서 다른지점에 도달해 작업을 할 수 있다.

  • 한번에 한 커밋 위로 움직이는 ^
    캐럿 연산자 : 참조 이름에 하나씩 추가할때마다, 명시한 커밋의 부모를 찾게된다!
    main^은 main의 부모,
    main^^은 main의 조부모를 의미한다.

만약 main의 부모를 checkout 할때는
git checkout main^
을 실행하면 된다. (커밋도 checkout의 대상이 될 수 있음)

  • 한번에 여러 커밋 위로 올라가는~<num>
    틸드 연산자 : 올라가고 싶은 부모의 개수를 숫자로 지정할 수 있다.

예시

상대참조를 사용하는 일반적인 예시중 하나는 브랜치를 옮기는것!
-f옵션을 사용해서 브랜치를 특정 커밋에 직접적으로 재지정 할 수 있다.

git branch -f main HEAD~3
이런식으로...

위의 명령어는 강제로 main브랜치를 HEAD에서 세번 뒤로 옮긴거임

그러니깐

이 상황에서

이렇게 main브랜치가 옮겨진다!


예시를 하나 더 보면

이 브랜치들을 두번째 사진과 똑같이 옮기려면

BEFORE :

AFTER :

  1. bugFix를 맨 위로 옮기기

  2. main을 C6으로 옮기기

  3. HEAD를 C1으로 옮기기

Git에서 작업 되돌리기

git에서 변경한 내용을 되돌리는 방법은 크게
1. git reset
2. git revert

  • reset
    브랜치로 하여금 예전의 커밋을 가리키도록 이동시키는 방식으로 변경 내용을 되돌린다. 즉, 애초에 커밋하지 않은 것처럼 예전 커밋으로 브랜치를 옮기는 것!

그런데 각자의 로컬 브랜치에서는 reset을 사용할 수 있는데, 다른사람이 작업하는 리모트 브랜치에서는 쓸 수 없다.

  • revert
    변경분을 되돌리고, 이 되돌린 내용을 다른 사람들과 공유하기 위해서는, git revert를 써야한다.

reset과의 차이를 보면 reset은 이전의 커밋으로 돌아가는 반면,
revert는 새로운 커밋이 생긴다. 새로생긴 커밋은 그 이전의 커밋과 완전히 반대되는 내용이다!!

Git Cherry-pick

다른 브랜치에서 특정 커밋을 복사하여 현재 브랜치로 가져올 수 있다.

git cherry-pick <Commit1><Commit2><...>
위 명령을 실행하게 되면 cherry-pick 뒤에 적은 순서대로 가져와진다!


cherry-pick을 사용하는 경우는
1. 특정 브랜치에 잘못 추가한 커밋을 올바른 브랜치로 옮기려고 할 때나
2. 다른 브랜치의 커밋을 현재 브랜치에도 추가하고 싶을때
이다.

Interactive-Rebase

체리픽은 원하는 커밋이 무엇인지 알때 유용하다!
하지만 원하는 커밋을 모르는 상황에서는 인터렉티브 리베이스를 사용하면 된다!

인터렉티브 리베이스를 사용하는 방법은
rebase 명령어 뒤에 -i를 붙여주면 된다.

이 옵션을 추가해서 명령을 실행하게 되면 git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 텍스트 편집기텍스트 편집기를 띄운다.

이를 통해 할수있는것
1. 적용할 커밋의 순서를 바꿀수 있다.
2. 원하지 않은 커밋들을 뺄 수 있다.(pick)
3. 커밋을 합칠 수 있다.(squash)


이 글의 내용은 이론적인내용이 전부이지만
코드를 쳐보면서 연습해보고 싶으면 여기 들어가서 실제로 코드를 작성해보면서 공부할 수 있어유

참고
https://backlog.com/git-tutorial/kr/intro/intro1_1.html
https://learngitbranching.js.org/?locale=ko

0개의 댓글