View

이번주에 2차프로젝트가 시작하였습니다.
지난 1차프로젝트 까지는 git local 작업 환경에서
merge를 통하여 main과 branch를 병합하였다면,
2차 프로젝트에서는 rebase 를 적용해볼 예정입니다. 


Git Workflow & Rebase

 

🚀 학습 목표


  1. Git flow가 어떤 방식으로 운영 되는지 알고, main, develop, feature, release, hotfix 브랜치를 각각 구분하여 설명할 수 있다.
  2. branch를 병합하는 두 가지 방식인 rebase와 merge의 차이점에 대해 설명할 수 있다.
  3. rebase 명령어를 사용하여 불필요한 커밋을 하나로 squash 할 수 있다. (rebase 하면서 스쿼시를 같이 한다.)

* production revel의 코드들의 관리 전략

 

🙌 Mentor's Guide


  • rebase를 하면서 동시에 squash 를 사용해 커밋을 하나로 정리 할 수 있습니다. 꼭 브랜치를 합쳐야 하는 상황이 아니더라도
    git rebase -i main 명령어를 통해 중간 중간 브랜치에 쌓인 커밋을 하나로 정리해주세요. 또한 정상적인 경우 PR / 브랜치 당 커밋이 하나여야 한다는 점 기억해주세요!
  • rebase 도중 충돌이 일어날 경우 마치 코드가 날아간 것 처럼 보일 수 있습니다. 코드가 사라진 것이 아니라 코드를 합치던 도중 중단된 것입니다. 충돌을 해결하고 남은 과정을 끝까지 진행하면 모든 코드가 다 들어와 있게 됩니다.
    혹 잘못 리베이스를 했다면, git rebase —-abort (리베이스 도중) 혹은 git reflog 로 돌아갈 지점을 찾은 후 git reset --hard 돌아갈지점 (리베이스 완료 후) 명령어로 복구할 수 있습니다. 
    3개커밋이 하나씩 날라와서 합쳐지는 개념이므로 충돌이 해결되어야 합쳐질 수 있다.
  • 충돌 발생 시 에디터에서 충돌 해결 후 git add . git rebase —continue 를 반복하되, commit을 해줄 필요는 없습니다.

 

 

 

 

 

👉 commit간 충돌이 나지 않게 commit & reabse를 하여 그때그때 커밋 정리해주자!!!

 


🤟 Git rabase 정리 🤟 

[ 새로운 작업을 모두 마치고 push 하기 전에는 ]

1. Main branch 로 이동하여 remote main을 pull 받는다.

2. 내가 push 할 Feature branch 로 이동한다.

3. `git rebase -i main` 를 진행한다

 

[ Rebase 하는 동안 squash 진행할 때에는 ]

1. 가장 오래된 commit을 pick 한다.

2. 다른 커밋 메세지는 가장 오래된 commit을 기준으로 squash 한다.

3. 다른 커밋의 작업 내역이 없어지는 것이 아닙니다.

4. Esc -> :wq! 로 창에서 빠져나온다.

 

[ 놀라지 마세요! 수정용 에디터가 하나 더 나타납니다. ]

1. 최종적으로 이 rebase된 커밋의 내용을 작성하는 부분.

2. 현재까지 적은 커밋 메세지가 전부 나타난다.

3. 불필요한 내용을 제거하고 현재 수정 내역에 대한 커밋 메세지를 정 성껏 작성한다.

4. Esc -> :wq! 저장하고 에디터에서 빠져나온다.

 

[ Successfully rebased ! ]

1. 성공했다면 git log로 깔끔해진 커밋 메세지를 한 번 감상한다.

2. push를 합니다.

 

[ Rebase 후 push 하기 ]

1. Rebase는 commit history를 정리하는 역할을 한다.

2. 같은 브랜치에서 Rebase를 할 때마다 history가 달라질 수 있다.

3. 수정 사항이 추가로 생긴 후 다시 rebase하면 history가 무조건 달 라진다.

4. git은 history가 다른 branch의 push를 허용하지 않는다.

5. `git push origin feature/login -f` -f 옵션을 사용하여 force push를 진행한다.

 

[ Rebase 중 충돌 해결하기 ]

1. 충돌이 일어난 경우 Rebase가 진행되지도, 끝나지도 않고 도중에 멈춰 있어, 매우 당혹스럽다.

2. 터미널이 (rebase ~ 1/6) 과 같은 메세지로 rebase가 진행중임을 알려주니 겁먹지 않도록 하자!

3. 충돌은 충돌일 뿐, 해당하는 코드를 수정 후

4. Git add .

5. (Git commit은 하지 않는다. 수정 사항이 없으니까)

6. Git rebase ㅡㅡcontinue를 진행한다

7. 멈춰 있던 리베이스가 진행된다.

8. 충돌이 여러번 나면 그 때마다 충돌을 해결하고 git add . / git rebase ㅡㅡcontinue를 반복한다.

9. 계속 해결이 안된다면, git rebase ㅡㅡabort로 아예 rebase를 진행하기 전 상황으로 돌아갈 수도 있다.

 

그밖의 알아두면 유용한 Git 명령어

- Git reset soft vs hard

- Git log - Git reflog

- Git checkout

- Git stash & git stash apply & git stash clear

Share Link
reply
«   2024/10   »
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 31