본문 바로가기

TIL

git revert ,rebase, amend, Squash

이번에 과제를 진행하면서 이전에 그냥 아~ 이런게 있구나 했던것들에 대한 개념이 조금더

자리를 잡은듯한 느낌을 받았습니다.

 

이전에는 그냥 fork 후 commit - pr - merge 중간중간 충돌 해결 등 이 과정들의 그냥 반복이었다면.

이번 과제를 통해 진짜 branch를 사용하고 그와중에 revert의 개념이 정확히 무엇을 하는지 외에도 reset,restore 가 무엇인지 또 

upstream 이 무엇인지, rebase, amend가 무엇을 하기위한 명령어인지 정확하게 인지를 한거같습니다.

 

외에 강의에서의 이슈등록이나 체리픽, 자소서, vim편집기, 칸반등 다양한 개념을 다시 한번 리마인드하고, 기억하는 계기가 되었습니다. 

 

1. revert 

revert 이녀석 정확히 무엇인고.. 항상 깃 커밋 푸시중 오류가 발생하면 아 일단 revert하자 했는데 드디어 

revert와 reset, restore의 차이점이 무엇인지 정확하게 인지하였다. 

reset : --soft , mixed(기본) , --hard 세가지 옵션이 있으며 각각

  • 커밋 기록은 지우고 변경된 파일은 유지하고 스테이징 영역에 올려둔다.
  • 커밋 기록을 지우고 변경파일들도 워킹 디렉토리로 옮긴다.
  • 커밋, 스테이징, 작업 파일까지 전부 삭제 완전 초기화

또한 HEAD~ 표기법을 통해 빠르게 한단계 전으로 되돌릴 수 있다.

 

restore : 과거 커밋기록에는 영향을 주지않고, 워킹 디렉토리나 스테이징 영역에서 변경 사항만 되돌릴 수있다,

전체 커밋단위가 아닌 파일단위로 작업을 조작하며 수정중인 파일을 현재 커밋상태로 되돌릴 수 있다.

--staged 옵션이있으며 실제 변경 내용은 유지되지만 스테이징 영역에서 내려가 추적되지 않는다.

 

revert : 기존 커밋내용을 취소하면서 기록을 보관, 새로운 커밋을 생성. 즉 커밋이 2개가 생기는거다.

-n 옵션을 사용하면 변경사항만 취소하고 새로운 커밋은 생성하지 않을 수 있다.(관리의 용이)

 

2. rebase

이놈이놈이 아주 물건이다.

나는 이전에 개인 프로젝트를 하면서 이걸몰라서 브런치를 매번 지우고 새로만들고 반복을했는데, 이젠 그럴 필요가 없다..

물론 깃허브에서 pull하고 그걸 가져올 수 있지만, 왜인지 가끔 안되는 경우가 있어서 이 rebase를 하는게 짱인거같다.

 

내가 만약 dev 에서 작업을 하고있는데 누군가 main 에 commit merge를 3개를 했다고 생각해보자.

어? 그럼 내가 지금 작업하는 내용과 실제로 main에 코드가 달라서 어떤 에러가 발생할지 아무도 모르게된다.. 

허 그럼 main과 내 버전을 맞춰야 할거같은데.. 이런상황에서 사용하는게 rebase이다.

먼저 내가 떙겨보고싶은 버전을

git fetch origin 을해주고

이후 git rebase origin/main 을실행해주면. main 브랜치의 내용이 작업중인 브랜치에 담기는 것을 확인 할 수있다.

그리고 만약 내가 커밋을 진행한 상황이라면

* git fetch origin : 원격 저장소의 현재 최신 커밋정보 다운로드 실제 반영은 x

 

아래 사진처럼 커밋이 맨 앞으로 나가는 것을 확인 할 수 있다.

작업중인 커밋 d
메인 브랜치에 새로운 커밋 생성
rebase작업후 커밋 위치변경

3. amend

이것도 나름 쏠쏠 한 기능이다.

만약 내가 커밋을 했는데 아차! 파일을 까먹고 올리지 않았다 혹은 추가로 수정한 파일도 올려야한다. 그럼 같은 이름으로 커밋을 두번 하면 될까? ㄴㄴ 그러면 괜히 커밋수만 늘어나고 관리가 힘들어짐..

 

그럴때 사용하는게 amend이다 이 기능을 사용하면 이미 생성된 커밋에 추가적인 내용들을 더할 수 있다.

추가할 파일을 add 한다음

git add [파일명]
git commit —amend

실행

그러면 아래와같은 vim편집기가 나오고 커밋이름을 수정해도 되지만 나는 안할거니까 그냥 :wq로 저장후 빠져나왔다.

그러면 성공적으로 커밋에 새로운 파일 더하기가 성공한것을 확인할 수 있다.

 

4. Squash

이거는 처음본거라 진심 신기했다...

커밋을 여러번 하면 머지를 할때 여러개의 커밋이 한번에 올라가는데, 이때 너무 지저분하다고 생각되면(관리가 힘들어짐)

Squash merge 를 진행하면 모든 커밋이 하나의 커밋으로 묶여서 깃허브에 올라가게 된다.

 

이렇게 하나의 커밋으로 합쳐진것을 볼 수 있다!

 

역시 나는 아직 많은 경험을 해보진못한 개발자라는 것을 뼈져리게 느낀듯하다.

내가 남들보다 조금 더 할줄안다고 해서 거만하지말고,

다른분들의 역량을 끌어올리는 만큼 나도 올라간다는 생각으로 많이 도움을 드리고 같이 성장하고싶다.