일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 아오
- 자바
- AI
- Linux
- While문
- 잠시만조용히
- 인텔리제이
- Vue
- GIT
- 인공지능
- 로그
- Linked List
- 핫모듈
- for문
- 안드로이드 빌드 안될때
- gitbash
- Intellij
- 반복문
- rufus
- 깃
- 운영체제
- 안드로이드 빌드 안됨
- marquee
- 부팅디스크
- MUI
- CentOS7
- 연결리스트
- 백틱
- CentOS
- 한글깨짐
- Today
- Total
새끼 개발자의 Life is egg
푸시하지 않은 예전 커밋 수정하기 (git rebase 이용) 본문
푸시하기 전에 커밋 목록을 살피다가
커밋하기 싫었는데 왜인지 커밋된... 파일을 발견했다.
한번 커밋된 파일을 변경하거나 제거할수는 없다고 하고
모든 커밋에서 특정 파일을 지우는 방법은 있는 것 같은데...
내가 원하는건 과거의 특정 커밋에서 딱 파일 하나만 제거하거나 코드 한줄만 지우면 되는거였다.
다행히 아직 푸시 전이라서 rebase로 해결이 가능했다.
(이 때 rebase 는 커밋을 수정하는게 아니라,
기존 커밋을 없애고 새로운 커밋(베이스)을 만든다고 생각하면 될것같다.
실제로 rebase 후에 수정한 부분을 제외하면 커밋 내용도 커밋 메시지도 변하지 않지만,
작업한 커밋 시점 이후 커밋들의 해시값이 변경된다!
그래서 리모트 리포지토리에 푸시된 커밋을 rebase 하는것은 위험하다.
해당 커밋을 pull 받아 작업중인 사람들의 커밋과 뒤섞여 엉망진창이 될 수 있다... 와장창)
작업 순서
1. git log 를 보고 작업해야할 커밋의 '직전' 커밋 해시를 딴다.
커밋 1 [HEAD] 123123
커밋 2 678678
커밋 3 asdasd
커밋 4 zxczxc
커밋 5 [origin/main] dfgdfg
커밋 6 bnmbnm
...
이 상태에서 커밋 3의 작업내용을 수정하고 싶다면
커밋 4의 해시 'zxczxc' 를 따면 된다.
2. git rebase -i 해시
(-i 옵션은 --interactive 축약옵션이다. 작업을 대화형으로 편하게 실행할 수 있는 옵션이라 함)
git rebase -i zxczxc
를 입력하면
편집기가 실행되면서 커밋 3 이후의 커밋 목록이 표시된다.
수정할 커밋의 pick이라는 단어를 edit 으로 변경하고 저장한다.
(키보드 i 키를 누르면 insert 모드로 진입하고,
저장은 Esc 키를 누르고 :wq 를 입력 후 엔터)
pick asdasd 커밋 3
pick 678678 커밋 2
pick 123123 커밋 1
에서
edit asdasd 커밋 3
pick 678678 커밋 2
pick 123123 커밋 1
이렇게
3. 그러면 터미널이 git commit --amend, git rebase --continue 하라고 알려준다.
(커밋하기전에 add 부터 하는것을 잊지말자)
이제 IDE에 뜨는 파일은 커밋 3 당시의 내용들이 뜰것임,
원하는 부분을 수정하고
git status 로 확인하고
git add 수정한 파일
또는
git add .
그 후에
git commit --amend
커밋 메시지를 수정할수있는 편집기가 뜨는데
커밋 메시지를 바꾸지 않을거라면 그냥 :q 치고 나오면 된다.
여기까지 문제가 없다면
git rebase --continue
Successfully rebased and updated 라고 뜨면 끝
이제 수정된걸 확인해보면 된다.
*
rebase 시에 충돌이 나는 경우가 있다.
머지도중 어떤 파일에서 컨플릭트 났다고 알려주므로
당황하지 말고 충돌부분을 수정하고 다시 3번을 처음부터 진행하면 된다.
**
수정한 결과가 변경사항이 없는 상태가 된다면
You asked to amend the most recent commit, but doing so would make
it empty. You can repeat your command with --allow-empty, or you can
remove the commit entirely with "git reset HEAD^".
interactive rebase in progress;
그냥 커밋 삭제해버리라고 하는데
그걸 원하는게 맞다면
git reset HEAD^
git rebase --continue
하면
git commit --allow-empty
하라고 할때가 있는데 해주고 다시 rebase continue 하자
Successfully rebased and updated 라고 뜨면 끝
이렇게 하면 수정한 커밋이 사라지거나
그 커밋 이후 내역들하고 합쳐짐
커밋메시지를 잘쓰자
***
잘 모르겠고 됐고 걍 때려치우고 싶으면...
git rebase --abort 를 입력하자
'개발's egg > Git' 카테고리의 다른 글
깃 커밋 합치기 (0) | 2023.08.22 |
---|---|
실수로 git stash drop 했을 때 되살리기 (0) | 2023.08.11 |
git stash, 특정 파일만 stash 하기 (0) | 2023.07.31 |
특정 커밋까지만 푸시하기 (0) | 2023.07.24 |
깃허브 git push error repository not found (0) | 2023.05.23 |