카테고리 없음

ABC 부트캠프 AI 파일럿 1기 MLOps 49일차 : reset과 revert, cheery-pick

개발 기록자 2026. 10. 13. 15:57

커밋하기도 버리기도 어려운 경우에는 선택지 1,2,3을 해서는 안되고 4를 해야한다.

 

 

 

 

 

@(엣)

 

git stash pop 꺼내고 목록에서 제거

<->

git stach apply 꺼내되 목록에 그대로 둔다(pop과 별개)

 

복잡한 작업은 apply 간단한 작업은 pop을 추천한다.

 

stash는 빠르게 처리할수록 좋다

예를 들어 일주일 내에 처리해야하면 commit이 낫다.

 

 

 

stash의 실습

 

 

 

체리픽은 아주 특수한 경우에만 사용한다.

머지를 하는 식으로 정석적인 방식을 사용하는 것을 추천한다.

 

 

변경내역을 복사해서 새 커밋으로 만든다 ->해시값이 바뀐다.

 

체리픽을 하는 대신 대안(merge, rebase..)를 하는 것을 추천한다.

 

단, 남의 브랜치에서 유용한 한 커밋은 체리픽을 사용하는 매우 적절한 예시이다.

나머지는 실수를 유발할 가능성이 높다

 

 

이건 3way merge인데, 요즘은 한줄로 하는 것을 가장 많이 사용하는 거 같다.

 

 

 

 

 

리모트에 올리기 전, 로컬에 있을 경우에만 가능하다 

PR을 올린 사람이 merge하는 게 가장 좋다

 

amend --no-edit : 메시지 변경 안하고 파일만 추가하라

단, amend는 마지막 커밋만 가능하다.

 

 

 

 

head : 현재 내가 바라보고 있는 곳 

rebase -i : 커밋의 결과물을 합칠 수 있다( 대화형 )

단, 내가 작업하고 있는 브랜치에서만 가능하다.

메인에서는 해서는 안된다.

 

squash : 위에 합치다 

pick : 커밋을 그대로 사용한다

 

실제 메인에서 보고 싶은 것은 브랜치의 최종적인 마지막이다.

이력을 깔끔하게 하기 위해 rebase(통합)를 하는 것이다.

요즘은 이렇게 사용하고 있다.

 

 

이 두개의 강력한 룰

반드시 push하기 전에 사용해야한다.

즉, 로컬에서만 사용해야한다.

 

 

 

 

 

 

 

실습을 전부 완료했다.

 

rebase -i가 아직 헷갈린다.

 

 

깃 LFS에 영상이나 이미지를 별도로 저장한다.

깃에는 텍스트 위주로만 저장하게 한다.

 

왜 깃LFS에 이미지/영상을 따로 저장하게 할까?

git clone했을 때 오래 걸리기 때문이다.

 

모노레포는 하나의 깃 리파지토리에서 백엔드와 프론트엔드를 한번에 관리하게 하는 것이다.

 

 

특정 파일의 작업 변경 이력을 변경할 수 있다.

 

git restore --staged를 하면 add를 취소할 수 있다.

 

로컬에서 커밋 실수 : git reset

리모트에서 커밋 실수 : git revert

 

단, git revert를 하더라도 취소한 이력은 남아있다.

최대한 꼼꼼하게 확인한 후에 push를 해야한다.

 

soft : add만 제거하고 스테이지에 둔다

mixed : 작업 디렉토리에 두고 add부터 전부 다 시작하겠다.

hard : 임시로 만든 파일도 전부 제거된다. 

 

Q. hard와 git clone과 동일하지 않나?

(단,  clone의 경우 env 파일은 재설치해야한다는 점에서 다르다.)

 

소프트로 실습을 할 예정이다.

 

 

 

reset

이력을 삭제할 수 있다.

<->

revert

취소되어도 이력이 사라지지 않는다.

따라서 공유 이력이 안전하다

 

기본 값으로 revert를 쓰는 것이 좋다.

다만 .env파일이나 개인적인 파일을 실수로 올렸을 때는 reset을 사용하는 것이 좋다.

 

 

 

 

실무에서 수행할 일은 매우 적다.

 

 

브랜치를 제거할 때 -d랑 -D의 차이

 

-D는 merge안된 브랜치도 제거할 수 있다

 

 

reflog를 하면 지금까지 작업한 이력을 확인할 수 있다.

 

 

지금은 이 명령보다도 테스트코드를 많이 사용한다.

이 명령은 개발팀보다 QA팀에서 많이 쓸 거 같다.

 

 

 

 

 

아까 배웠던 Git LFS

주로 이미지나 영상은 CDN 에 넣는다

 

텍스트는 변경된 이력만 저장하는데 이미지는 전체를 저장한다.

 

CDN을 사용하는 이유

CDN 중앙서버에 있는 데이터를 가져가는 것이다.

무슨 소린지 모르겠지만 굉장히 쉽고 빠르고 저렴하게 서버를 구축할 수 있다

공모전을 할 때 찾아보면 좋다.

작은 서버의 경우 한달에 천원 이내로 사용이 가능하다고 하다.

 

 

1. 커밋의 단위를 명확하게

2. 가능한 기능을 작게 만들어서 커밋을 하도록

3. 깃의 커밋 문자 메시지의 품질을 높이는 쪽으로

4.리뷰, 이슈, 질의사항을 남길 때 문장을 형식화하여 남기도록

 

1,2번 정도만 알아도 크게 문제 없을 것 같다.

 

다만 1,2가 반드시 내재화되어야 한다.

 

 

https://www.sourcetreeapp.com/

 

 

https://gitkraken.com/

 

 

CLI가 어려우면 이런 GUI를 사용하면 된다.

 

 

https://cli.github.com/

 

그러나 이 github CLI 명령어를 공부하는 게 더 효과적일거다.

 

 

실습을 하면서 궁금했던 점

내부에 아래와 같은 폴더가 있다.

 

폴더에 들어가면 git이 활성화 되길래 내부에 깃을 따로따로 다 설정해놓았는지 궁금했다.

 

활성화된 git의 모습

 

교수님께 여쭤보니 GUI로 알려주셨다.

 

이게 탐색기로 확인한 폴더

 

내부에 로컬리파지토리가 있는 것을 확인했다.

 

GUI로 확인하니 한눈에 들어와서 좋았다.

 

 

 

오늘까지 깃을 5일간 배웠는데 시간이 정말 빠르다.

조만간 또 프로젝트를 시작하겠지?