일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 려려
- 오블완
- conda base 활성화
- 3000 port kill
- conda 가상환경 설정 오류
- conda base 기본 설정
- 티스토리챌린지
- time wait port kill
- conda 기초 설정
- 실행중인 포트 죽이기
- window netstat time wait 제거
- Today
- Total
모도리는 공부중
[Git] Learngitbranching 사이트 문제 풀이 본문
2021.06.24 - [내 지식 정리/날것 그 자체] - [Git] 사용법 사이트 모음
learngitbranching 사이트에서 내가 풀어가는 내용들.
연습모드에서 사용할 수 있는 git 명령어
- commit
- branch
- checkout
- cherry-pick
- reset
- revert
- rebase
- merge
- level intro3 : merge
이렇게 만들기 위해 내가 사용한 명령어는 6개이다.
git branch bugFix;
git checkout bugFix;
git commit;
git checkout main;
git commit;
git merge bugFix;
그리고 원래 설명인 objective에서 시킨대로 하면 위의 그림과 달라진다.
그러나 모범답안은 5개라고 하니.. 대체 어떻게 해야 5개가 되는걸까? 나는 아직 답을 찾지 못했으니 답을 찾은 분은 댓글에 달아주시면 감사하겠다.
- level intro4 : rebase
브랜치끼리의 작업을 접목하는 방법 중 하나로, 커밋들을 모아서 복사한 뒤 다른 곳에 떨어뜨려 놓는다.
rebase를 사용하면 C1 부모 아래에서 main과 별개로 커밋되어있던 작업인 bugFix가 C3'라는 작업내용으로 복사되어 main과 같은 줄로 이동된다. main 브랜치도 bugFix와 같은 위치를 가리키게 하고 싶다면 이 역시 rebase로 가능하다. 이 경우 main이 bugFix의 부모쪽에 있었으므로 단순히 그 브랜치를 bugFix쪽을 가리키게 이동하는 정도로 rebase의 역할이 그친다. (여기까지는 learngitbranching사이트 설명 그대로 기재. 내가 이해가 잘 안가서..)
입력한 명령어는 아래와 같이 7개이며, 모범답안은 6개이다.
git branch bugFix
git checkout bugFix
git commit
git checkout main
git commit
git checkout bugFix
git rebase main
- commit 이동하기 level rampup2, 3
git commit에서도 상대참조, 상대커밋이라는 기능이 존재한다. 이 상대기능을 이용하는 방법은 간단하게 2가지가 있다.
- 한 번에 한 커밋 위로 움직이는 ^(캐럿)
- 참조 이름에 하나씩 추가할 때마다 명시한 커밋의 부모를 찾는다.
- main^ = main의 부모 / main^^ = main의 조부모
- 한 번에 여러 커밋 위로 올라가는 ~<num>(틸드)
- 한 번에 올라가고 싶은 부모의 개수(숫자)를 틸드 뒤에 추가한다.
- HEAD~숫자 = 숫자만큼의 부모를 찾아 올라간다.
2개의 명령어로 통과. 모범 답안은 1개.
git checkout bugFix
git checkout HEAD^
-f 옵션을 이용하여 브랜치를 특정 커밋에 직접적으로 재지정할 수 있다.
git branch -f main HEAD~3
위와 같이 -f 옵션을 사용하면 HEAD를 움직이지 않고 main 브랜치를 바로 옮길 수 있다.
실습에 들어가보자.
지금부터 오답
오답1.
마치 merge를 먹인 것마냥 되었다.
오답2.
이번에도 merge 먹인 것 같네..
오답3. 그럼 이번엔 bugFix를 C6로 내려보자.
C6가 아니라 C7에 새로 커밋되어버렸네... 아오..
- 이미 있는 커밋으로 가는 것이 아닌 새로운 커밋을 생성한다는 것을 깨달음.
오답1.
git branch -f bugFix HEAD^
마치 merge를 먹인 것마냥 되었다.
오답2.
git checkout main
git branch -f bugFix
이번에도 merge 먹인 것 같네..
오답3. 그럼 이번엔 bugFix를 C6로 내려보자.
C6가 아니라 C7에 새로 커밋되어버렸네... 아오..
git checkout bugFix
git commit
- 이미 있는 커밋으로 가는 것이 아닌 새로운 커밋을 생성한다는 것을 깨달음.
그리고 풀어낸 답
git checkout C6
git branch -f main
git checkout bugFix
git checkout HEAD^^
git branch -f bugFix C5~3
5개의 명령어를 사용하여 통과, 모범답안은 3개. 4개까지는 단축하였지만 3개는 아직 모르겠다.
git checkout C6
git branch -f main
git branch -f bugFix C5~3
git checkout HEAD^^^
- git에서의 작업 되돌리기 level rampup4
- 개별 파일이나 묶음을 스테이징하는 법 - 낮은 수준
- 실제 변경이 복구되는 방법 - 높은 수준
- git reset
- 각자 작업하는 로컬 브랜치의 경우 사용 가능. ex) git reset HEAD~1
- 다른 사람이 작업하는 리모트 브랜치에 사용 불가.
- git revert
- 변경분을 되돌리고 다른 사람과 공유 가능. ex) git revert HEAD
- 되돌리고자 하는 커밋 바로 아래에 새로운 커밋 생성. 다른 사람에게 변경내역 push 가능.
- git reset
그럼 실습을 통해 학습해보자. 하나는 local, 하나는 리모트 환경이다. 두 개를 각각 진행해본다.
이번에는 목표답안대로 통과 완료!
git reset HEAD~1
git checkout pushed
git revert HEAD
- git cherry-pick level move1
- 현재 HEAD 아래에 내가 선택한 커밋들의 복사본을 만드는 작업
- 내가 원하는 커밋(각각의 해시값)이 무엇인지 알 때 유용하게 사용 가능
- git cherry-pick <Commit1> <Commit2> <...>
- rebase를 통해서도 할 수 있는 작업이지만 cherry-pick을 이용하면 기존 커밋을 가리지 않고 복사본만 head 밑에 생성
이것 역시 모범 답안대로 통과 완료.
git cherry-pick C3 C4 C7
- git Interactive Rebase level move2
- 원하는 커밋을 모르는 상황에 사용. -i 옵션을 사용하여 리베이스할 일련의 커밋을 검토할 수 있음.
- git rebase -i HEAD~<num>
- 실제로는 vim과 같은 텍스트 편집기에서 사용하며 아래와 같은 환경이 아니다.
- 원하지 않는 커밋(가릴 커밋)은 omit을 통해 숨길(제외할) 수 있으며, pick된 커밋만 복사가 가능하다.
목표대로 만들기 위해 입력한 명령어.
git rebase -i HEAD~4
아래는 인터렉티브 리베이스 대화창이다.
위와 같이 변경하면 문제가 요구하는 답을 풀어낼 수 있다.
- 딱 한 개의 커밋만 가져오기 level mixed1
문제를 해결하는 방법은 두 가지이다. rebase -i와 cherry-pick을 사용하는 방법. 각각의 방법에 따라 해결된 상태의 그림이 조금씩 다르다.
rebase -i를 사용하여 통과시 코드와 그림은 아래와 같다.
git rebase -i HEAD~3
git branch -f main bugFix
cherry-pick을 사용하여 통과시 코드와 그림은 아래와 같다.
git checkout main
git cherry-pick bugFix
cherry-pick을 사용시 위의 그림처럼 C4[bugFix]가 음영처리되지 않고 그대로 남아있는 것이 아쉽지만 문제가 요구하는 바는 해결된 것으로 나온다.
'내 지식 정리 > 날것 그 자체' 카테고리의 다른 글
[잡설] 검색하면 주피터 노트북보다 랩이 더 많이 나오던데 (0) | 2021.07.08 |
---|---|
자주 사용하는 단축키 모음 (0) | 2021.07.05 |
[Git] 사용법 사이트 모음 (0) | 2021.06.24 |
웹에서 코드 입력 가능한 사이트 모음 (0) | 2021.04.21 |
2021.04.02. 오늘의 정보들 (0) | 2021.04.02 |