땃쥐네

커밋 순서를 바꿔 병합하고, 원격저장소에 강제 푸시하는 경험 본문

DevOps/Git

커밋 순서를 바꿔 병합하고, 원격저장소에 강제 푸시하는 경험

ttasjwi 2022. 1. 2. 00:42

* 주의 : 다른 사람들과 협업을 하시는 개발자분들은 따라하지마세요.

 

초창기에 백준 2438번 문제를 풀었던걸, 다시 최적화해서 풀면서 새로운 디렉토리로 옮기는 작업을 함께 진행하고 있다.

37bbeef 커밋 뒤에 b0054d9 커밋을 두고 이를 병합시키려면  어떻게 하면 될까?

 

현재 HEAD 기준으로 상위 3개까지의 커밋의 역사를 개변해야한다.

즉, 현재 HEAD가 가리키는 커밋 기준 4단계 상위의 부모를 기준으로 다시 기존 커밋들을 리베이스 해야한다. 이때는 대화형 rebase 명령을 이용하면 처리하면 편하다.

 

git rebase -i [커밋명]

명령은, 현재 HEAD가 가리키고 있는 브랜치를 지정 커밋을 기준으로 대화형 rebase 시키는 명령이다.

git rebase -i HEAD~4

여기서 37bbef 커밋이 가장 앞에 있고 그 이후로 순서대로 커밋이 나열되어 있는데

 

b0054d9가 있는 라인을 원하는 지점으로 밀어올리면 순서가 바뀌고

squash 해주면, 바로 위의 커밋과 병합할 수 있게 해준다.

이 상태에서 대화형 명령창을 종료하면 순서대로 리베이스 작업을 수행한다.

커밋을 병합하는 과정이다 보니 커밋 병합에 관해서 어떻게 커밋메시지를 작성할지를 묻는다.

#이 붙어있으면 그 줄을 주석으로 인식하고 #이 안 붙어있으면 커밋 메시지로 인식한다. 적당히 커밋메시지를 작성하고 창을 닫으면

$ git rebase -i HEAD~4
[detached HEAD fe105d5] [Baekjoon Online Judge] [Bronze 3] [2438] 별 찍기 - 1
 Date: Sat Jan 1 22:52:48 2022 +0900
 4 files changed, 42 insertions(+), 176 deletions(-)
 create mode 100644 "Online Judge/Baekjoon Online Judge/# 03. Bronze \342\205\242/# 02438. \353\263\204 \354\260\215\352\270\260 - 1/README.md"
 rename src/boj_2438/Answer.java => "Online Judge/Baekjoon Online Judge/# 03. Bronze \342\205\242/# 02438. \353\263\204 \354\260\215\352\270\260 - 1/src/Main.java" (62%)
 delete mode 100644 src/boj_2338/Main.java
 delete mode 100644 src/boj_2438/README.md
Successfully rebased and updated refs/heads/master.

별달리 충돌날 부분은 없었기 때문에 성공적으로 리베이스가 완료된다.

 

rebase를 했기 때문에, 커밋이 변경되어, 커밋의 SHA-1값도 기존과 달라져버렸다.

심지어 이전에 커밋한 내역들은 원격저장소에 이미 push된 상황!

 git push --force origin master

협업하는 개발자가 없는 저장소라서 믿음과 신뢰의 git push --force를 쓰면 된다.

 

이것으로 원격저장소에 push되어있던 커밋들을 지우고 내 커밋으로 덮어씌웠다.

 

역사속으로 기존 커밋들을 지우고, 커밋을 변경하는데 성공했으며 순서도 깔끔하게 정리되었다. 근데 이건 어디까지 이 저장소가 나 혼자 관리하는 저장소니까 가능했던거고, 협업하는 사람이 있었다면~ 그 날은 어떤 하루가 펼쳐졌을까 궁금해진다~~~

'DevOps > Git' 카테고리의 다른 글

.gitignore  (0) 2021.11.04
로컬 저장소 생성(git init)  (0) 2021.11.03
Git, GitHub 초기 설정  (0) 2021.11.03
Comments