일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Terminal
- tuist
- Method
- type
- enum
- delegate
- Class
- property
- Protocol
- Git
- IOS
- init
- 스위프트
- 디자인패턴
- initalizer
- url
- struct
- UIKit
- Swift
- instance
- initializer
- Xcode
- 이니셜라이저
- String
- optional
- extension
- interpace
- Unicode
- Foundation
- 코딩테스트
Archives
- Today
- Total
아리의 iOS 탐구생활
[Git] Rebase를 활용하여 이전 커밋 수정하기 본문
반응형
최신 커밋이 아니라 이전 커밋들을 수정하려면 interactive rebasing을 활용하면 된다.
대신 이전 커밋을 수정하게 된다면 그 커밋 이후에 생긴 커밋들도 모두 업데이트가 되 그점을 유의해야 한다.
git rebase -i 12345ab
위와 같이 -i 옵션을 사용하여 수정을 원하는 커밋 이전 커밋의 해시코드를 넣어주면 그 다음에 이어지는 모든 커밋들이 나와있는 걸 확인할 수 있다.
위와같이 커밋들이 표시가 되는데, 아래에 메세지들을 살펴보면 다음과 같이 명령어들이 정리되어있다.
# Rebase 98955fc..0ddd7ab onto 98955fc (4 commands)
#
# Commands:
# p, pick <commit> = use commit (이거 괜찮으니까 이거 써!)
# r, reword <commit> = use commit, but edit the commit message (괜찮지만 메세지를 변경하겠다!)
# e, edit <commit> = use commit, but stop for amending (커밋을 쓰긴 쓸건데 안에 변경사항을 바꿀거야)
# s, squash <commit> = use commit, but meld into previous commit(커밋을 하나로 묶어줄거야!)
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
# commit's log message, unless -C is used, in which case
# keep only this commit's message; -c is same as -C but
# opens the editor (스쿼시와 비슷하지만 메세지를 남기지 않는것임)
# x, exec <command> = run command (the rest of the line) using shell (커밋으로부터 shell명령어를 직접적으로 이용하고 싶을때 사용)
# b, break = stop here (continue rebase later with 'git rebase --continue') (여기서 멈추는 일)
# d, drop <commit> = remove commit (해당하는 커밋을 제거할때)
# l, label <label> = label current HEAD with a name (
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified); use -c <commit> to reword the commit message
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# 여기 줄을 제거하면 해당 커밋을 잃어버립니다!
#
# However, if you remove everything, the rebase will be aborted.
#
커밋메세지를 수정하려면 아래와 같이 r을 작성해주고 저장 후 창을 닫아주면 된다.
그럼 다음과 같이 commit 메세지를 수정할 수 있게 편집기가 다시 등장하는데,
커밋메세지를 수정한 후 저장하고 창을 닫아주면 변경된 메세지가 적용된 것을 확인할 수 있다.
수정할 커밋이 여러개라면 계속 편집기가 새롭게 열린다.
만약 수정할 커밋이 남았는데 편집기가 열리지 않는다면 git rebase --continue 명령어를 입력해서 계속 진행한다.
rebase를 활용할 때 주의할 점은 꼭 서버가 push가 된 히스토리를 이런 방식으로 rebase를 하는 것은 위험하다.
혼자서 작업을 하는거면 상관없지만 나 이외에 다른 개발자와 함께 일을 하는 경우라면 지양해야한다.
혼자서 작업중이고
이미 push가 된 히스토리를 rebase를 통해서 수정해주었다면
git push -f 옵션을 사용해 강제푸쉬를 진행해야한다.
Reference
반응형
'GitHub > Git' 카테고리의 다른 글
[Git] Basics, commit (0) | 2021.09.02 |
---|
Comments