📌 연습 중인 git branching 사이트
Learn Git Branching
An interactive Git visualization tool to educate and challenge!
learngitbranching.js.org
코드 이리저리 옮기기
Level 1. Cherry-pick 소개
여기까지 git의 기초를 배웠다.
커밋을 하고, 브랜치를 만들고, 소스 트리 여기저기를 돌아다녔다.
이런 개념들 만으로도 git repository의 힘을 90%이상 사용하고 개발자들이 필요로하는 작업의 대부분을 할 수 있다.
나머지 10% 기능은 복잡한 작업(or 작업중 막혔을 때) 중에 꽤 유용할 수 있다.
이제부터 볼 개념은 "작업을 여기저로 옮기기", 즉 개발자들의 언어로 "이 일은 여기에, 저 일은 저기에 두고 싶어"를 할 수 있게 하는, 다소 과해 보일 수 있지만, 간단한 개념이다.
이 시리즈의 첫 명령어는 git cherry-pick이다.
git cherry-pick <Commit1> <Commit2> <...>
현재 위치(=HEAD) 아래에 있는 일련의 commit들에 대한 복사본을 만들겠다는 뜻이다.
예시를 봐보자.
e.g. git cherry-pick C2 C4
=> side 브랜치에 있던 작업 중 C2와 C4 commit을 main 브랜치로 복사했다!
🗒️문제🗒️
이 레벨을 통과하기 위해서는 몇개의 작업을 세개의 브랜치들에서 main 브랜치로 복사해와야합니다. 어떤 커밋들이 필요한지는 goal을 보고 확인하면 됩니다.
git cherry-pcik C3 C4 C7
: C3, C4, C7 commit을 main 브랜치로 복사해서 각각에 대응하는 C3', C4', C7' commit을 생성
Level 2. 인터렉티브 리베이스(Interactive Rebase) 소개
git cherry-pick
은 원하는 commit이 무엇인지, 그 해시값도 알 때 아주 유용하다.
그러나 원하는 commit을 모르는 상황에는 사용할 수 없다.
이런 상황에 대한 대안으로 있는 것이 interactive rebase이다!
Interactive rebase가 의미하는 뜻은 rebase 명령어를 사용할 때 -i
옵션을 같이 사용한다는 것이다.
-i
옵션을 추가하면, git은 리베이스의 목적지가 되는 곳 아래에 복사될 커밋들을 보여주는 UI를 띄울 것이다.
각 커밋을 구분할 수 있는 각각의 해시들과 메시지도 보여준다.
"실제" git에서는 UI창을 띄우는 것 대신에 vim
과 같은 텍스트 편집기에서 파일을 열지만, 여기서는 배우는 것이 목적이기 때문에 같은 역할을 하는 작은 대화창을 만들어서 대신했다.
Interactive rebase 대화창이 열리면 아래의 3가지를 할 수 있다.
- 적용할 commit들의 순서를 UI를 통해 바꿀 수 있다. (여기서는 마우스 드래그엔 드롭으로 가능!)
- 원하지 않는 commit들을 뺄 수 있다. 이것은 pick을 이용해 지정할 수 있다. (여기서는 pick 토글 버튼으로 가능!)
- commit을 squash할 수 있다. commit을 합칠 수 있는 것인데 여기서는 지원을 하지 않는다.
🗒️문제🗒️
이번 레벨을 통과하기 위해서 goal에 나타난 순서대로 만들기 위해 인터렉티브 리베이스를 사용해봅시다. undo와 reset을 통해 했던 실수들은 되돌릴 수 있습니다 :D
1) git rebase -i HEAD~4
: 현재 위치인 HEAD에서부터 4번 뒤에 있는 commit인 C1을 리베이스의 목적지로 설정하고, 그 사이에 있는 commit들을 보여주는 interactive rebase 대화창을 띄운다.
2) interactive rebase 대화창에서 C2 commit 빼기, C4와 C5 commit 순서 바꾸기