Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 클린 코드
- collectionview
- combine
- Refactoring
- 애니메이션
- clean architecture
- 리펙토링
- UICollectionView
- UITextView
- RxCocoa
- Protocol
- Clean Code
- map
- Human interface guide
- swiftUI
- Xcode
- uiscrollview
- 스위프트
- ribs
- Observable
- uitableview
- rxswift
- 리펙터링
- 리팩토링
- MVVM
- ios
- tableView
- SWIFT
- swift documentation
- HIG
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[Git] git rebase interactive, git rebase -i, squash (커밋 합치기, 스쿼시, 중간에 커밋 넣기, 커밋 순서 바꾸기, conflict 해결 방법) 본문
Git, CocoaPods, Xcode, Shell/Git
[Git] git rebase interactive, git rebase -i, squash (커밋 합치기, 스쿼시, 중간에 커밋 넣기, 커밋 순서 바꾸기, conflict 해결 방법)
jake-kim 2023. 4. 29. 23:36Git rebase interactive
- 기존의 커밋을 수정, 삭제, 이동, 생성이 가능
사용 방법
- git rebase -i 옵션 또는 git rebase --interactive로 사용
- 커밋아이디 그 다음 부터 현재 커밋까지 모든 커밋을 가져옴
git rebaes -i 커밋아이디
- 커밋아이디를 사용해도 되지만 *HEAD를 사용해서 편리하게 사용도 가능
- *HEAD: 현재 작업 중인 브랜치의 가장 최신 커밋
- 기본적으로 git rebase -i 명령어 실행 시 HEAD는 현재 브랜치에서 가장 최신 커밋을 가리킴
- HEAD~3은 최신 커밋으로부터 HEAD포함하여 3번째까지 가져옴
- 입력하면 5가지 옵션 사용이 가능
pick - 커밋 순서를 재정렬하거나 해당 커밋을 수정 없이 그대로 사용한다는 의미
reword - 커밋 메시지 수정
edit - 커밋 수정
squash - 이전 커밋과 merge하여 단일 커밋으로 변경
fixup - squash와 비슷하지만 기존 커밋 메시지를 무시
drop - 커밋을 삭제
- 5가지 옵션을 중 원하는 동작을 선택하고 continue를 통해 작업을 완료
git rebase --continue
사용해보기
- 초기 상태
git log --graph
(위가 최신이고 아래로 갈수록 예전 커밋)
- git rebase -i를 사용하여 add 3과 add 2 커밋 합치기
- git rebase -i {add2 이전 커밋 id}
- 주의할점 - 수정하려는 커밋의 이전 커밋 id를 입력해야 수정하려는 커밋을 컨트롤 가능
% git rebase -i 9a5dcb653b900996555997b913f14eeabf4fe64a
주의) git log --graph에서 최신 커밋은 맨 위였지만 git rebase -i해서 나온 커밋의 최신은 반대 (맨 밑이 최신)
참고)
pick - 커밋 순서를 재정렬하거나 해당 커밋을 수정 없이 그대로 사용한다는 의미
reword - 커밋 메시지 수정
edit - 커밋 수정
squash - 이전 커밋과 merge하여 단일 커밋으로 변경
fixup - squash와 비슷하지만 기존 커밋 메시지를 무시
drop - 커밋을 삭제
- 2와 3을 합쳐야하므로 add 3 커밋을 squash하면 이전 커밋인 add 2와 합쳐지게 됨
- i를 눌러 insert모드에 들어간 후 s (squash) 입력
- 기대결과: add 3과 add 2 합침
- 입력 후 > esc > :wq 입력하면 아래처럼 커밋 메시지 수정할 수 있는 vim 모드 등장
- add 2와 add 3만 수정하면 완료 (#으로 시작하는 문구는 단순히 설명 문구이며 무시됨)
- 이대로 바로 저장하기위해서 :wq 입력
- git log --graph로 확인
- 합쳐진 것을 확인
- vim에서 pick을 이용하여 단순히 위치만 바꿔주기만 하면 순서도 변경 가능
- add 2를 최신 커밋으로 이동하려면?
git rebase -i HEAD~3
- 여기서 pick f966424 add 2를 add 4아래로 이동
- 아래처럼 수정 후 :wq 입력
- conflict 발생
rebase interactive 중 conflict 해결 방법
- 위처럼 conflict이 난 경우 아래 단계를 통해 해결이 가능
- 1) conflict 발생한 파일 수정
- 2) 수정된 파일을 스테이징 영역에 추가 git add .
- 3) 다음 커밋으로 이동 git rebase --continue
- 4) 만약 conflict가 여전히 남아 있다면 다시 2, 3번을 반복
- (rebase interactive를 다시 포기하고 원복하고 싶다면 git rebase --abort)
- conlict를 해결하기 위해서 원본 파일 확인
- vscode로 test.txt 열면 컨플릭 쉽게 확인이 가능
- 현재 add 1 커밋에 위치한 상태이고 (현재 HEAD인 상태), 그리고 b0454a1은 가장 최신 커밋 add 4 상태
- add 1커밋은 1만 위치하면 되므로 1만 놓고 저장
- 수정된 내용을 stage에 올리기
git add .
- 컨티뉴 - 다음 커밋으로 이동
git rebase continue
conflict이 없다면 완료)
- rebase가 종료되었는지 확인 git status
% git status
On branch main
nothing to commit, working tree clean
(최종 파일 - add 4를 지웠기 때문에 add 4커밋도 지워짐)
- 그래프로 확인
git log --graph
(만약 위에서 add 4를 지우지 않았으면 add 4커밋도 생성되어 있을것)
* 전체 코드: https://github.com/JK0369/ExRebase
* 참고
'Git, CocoaPods, Xcode, Shell > Git' 카테고리의 다른 글
[Git - terminal] git 유용한 명령어 모음 (커밋, 상태, 로그, 되돌리기, Interactive) (0) | 2023.05.09 |
---|---|
[Git - terminal] git 특정 부분만 stage로 올리는 방법 (git status, git diff, git add -p) (2) | 2023.05.08 |
[iOS - swift] 1. GitHub Action 개념, 기능 (CI/CD) (0) | 2021.12.04 |
[git] 롤백 revert, reset, cherry-pick (0) | 2021.02.09 |
[Git] 9. rebase interactive - 이전 커밋내용 수정하기 (source tree 사용) (0) | 2020.08.31 |
Comments