일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스위프트
- Codegen
- Modality
- SWIFT
- NotificationCenter
- Mock
- 아이폰
- 야곰아카데미
- contentInset
- 부트캠프
- 책후기
- 독후감
- mvvm
- Structures and Classes
- 스타트업주니어로살아남기
- SWIFTUI
- 독서후기
- roundingMode
- UIResponder
- xcode
- Navigation
- delegation
- NumberFormatter
- human interface guidelines
- Failed to register bundle identifier
- View Life Cycle
- @available
- viewcontroller
- Info.plist
- IOS
- Today
- Total
호댕의 iOS 개발
[Git] 이미 Push를 해버린 Commit을 어떻게 고치지... 본문
이미 커밋을 하고 한~참 시간이 지났다가 중간에 딱 한 커밋이 카르마 규칙을 준수하고 있지 않은 것을 발견했다. 지금까지 바로 직전의 커밋이었으면 reset을 하고 다시 커밋을 했지만 이미 다른 커밋들이 쌓인 뒤라 reset을 할 수도 없었다.
(찾아보니 이미 commit을 했다고 해도 push를 하지 않았다면 ammend 명령어를 사용하면 된다)
git commit --amend
하지만 이 방법은 Push를 하지 않았을 때 사용할 수 있다. 🥲
하지만 나는 이미 Push를 해서 Github에 이미 올렸고 이미 많이 commit을 진행하여 이 방법은 사용할 수 없었다.
이때 사용할 수 있는 방법이 바로 rebase 이다.
먼저 git log를 해서 커밋 로그를 살펴보자.
그렇다면 지금 Head를 기준으로 고쳐야 할 Commit이 어디에 있는지 확인할 수 있다.
예를 들어 현재 Head를 기준으로 6번 먼저 Commit을 했던 코드를 고친다고 가정해보자.
그렇다면 이렇게 명령어를 작성하면 된다.
git rebase -i Head~6
다만 rebase를 할 때 수정한 내용이 있다면 이와 같은 에러가 발생한다.
error: cannot rebase: You have unstaged changes.
rebase를 할 때에는 반드시 이미 수정 내용이 stage에 올라가있어야 한다.
만약 push할 내용이 있다면 push를 해주고 아니라면 git stash를 해서 변경 내용을 저장하거나 git checkout . 을 사용해 다시 변경 내용을 지우도록 하자.
이렇게 위 명령어를 입력하면 아래와 같은 화면을 볼 수 있다.
그림에서 보다시피 Head로 있던 곳에서 시작해서 위에서 6번째 코드까지 rebase를 할 수 있는 것을 볼 수 있다.
여기서 i를 눌러 명령어를 수정할 수 있도록 하고 pick을 reword로 수정하면 해당 커밋 메세지를 수정할 수 있는 창으로 이동하게 된다.
그러면 수정하고 싶은 부분을 수정하고 esc를 눌러 수정 모드를 나온 뒤 :wq를 해서 저장 후 나오면 커밋 메세지가 수정되게 된다.
하지만 이렇게 하면 문제가 있다... 🙀
바로 Github의 원격 저장소와 Local의 저장소 상태가 다른 것이다. 이렇게 Push를 하려하면 Push가 되지 않는다.
따라서 이때 강제 Push를 해서 원격저장소로 보내줘야 한다.
즉 다음 명령어를 사용해야 하는 것이다.
git push -f origin branch명
하지만 이렇게 하게되면 강제로 rebase했던 부분을 전부 커밋이 새롭게 되게 된다.
따라서 협업을 하고 있었다면 엄청난 Side Effect이 발생할 수 있는 것이다...
항상 Commit과 Push는 신중히 하는 것이 가장 좋은 방법인 것 같다...
'Software Engineering' 카테고리의 다른 글
[운영체제] 동기와 비동기의 개념을 정리해보자. (0) | 2022.07.24 |
---|---|
[운영체제] CPU 스케줄링(Scheduling)은 어떻게 이뤄질까? (0) | 2022.07.19 |
[운영체제] 운영체제(OS)란 무엇이고 프로세스와 스레드는 뭘까? (0) | 2022.07.18 |
[면접 후기] IT 동아리 '넥스터즈' 면접 후기 (0) | 2022.06.14 |
[야곰 아카데미] 커리어 스타터 캠프를 마무리하며 (0) | 2022.04.17 |