우선, 아까 만든 원격 저장소에서 새로운 기능을 개발하여 커밋을 진행했다고 생각해 봅시다. 그런데, 커밋을 생성한 직후에 사소한 변경 사항이 추가로 발생했습니다. 이 경우, 반드시 또 하나의 커밋을 새로 생성해야 할까요? 새로운 커밋을 하나 더 추가로 생성하지 않고도 수정이 가능할지, amend 기능을 살펴보겠습니다.
○ 푸시가 되지 않은 커밋 변경사항 수정하기
우선 새로 만든 로컬 저장소(git_casestudy)에서 새로운 파일[amend.md]를 하나 생성하고, 첫 줄에 "어멘드 생성"이라는 라인을 하나 남겨보겠습니다. 그리고 이 파일을 스테이지에 올린 다음 [어멘드 파일 생성]이라는 커밋을 만들어 보겠습니다. 단, 아직 푸시까지는 진행하지 않습니다.
커밋까지만 진행하고, 원격 저장소로 푸시를 진행하지 않은 현재의 상태에서 우리가 실수를 발견했다고 가정해 보겠습니다. 기존 파일의 "어멘드 생성"을 "amend 생성_210101"이라고 바꾸어야 한다는 것을 확인했습니다.
그럼 새로운 커밋을 굳이 하나 더 추가해야 하는 것일까요? 우선, 현재 커밋 상태에서 [amend.md] 파일을 다시 수정하겠습니다.
이렇게 새로운 수정 사항이 추가로 발생하게 되면, 아래의 그림과 같이 커밋이 생성됩니다. 이때, 새로 생성된 커밋을 확인하고 스테이지로 올린 다음 [커밋 옵션]을 선택합니다. 그리고 "마지막 커밋 정정(Amend last commit)"을 선택합니다. 그리고 팝업 창이 출력되면 [예]를 클릭합니다.
팝업을 선택하면 자동으로 커밋 메시지가 "어멘드 파일 생성", 즉 마지막 최근의 커밋 제목으로 자동 생성됩니다. 물론, 그대로 사용해도 되고 수정을 진행해도 됩니다. 어쨌든 새로운 커밋이 추가되는 것이 아니라 수정된다는 사실을 유추할 수 있습니다. 여기서는 시험 삼아 [amend.md 파일 생성]이라고 커밋 메시지를 수정해 보겠습니다. 그리고 커밋을 실행하면 다음 이미지와 같이 히스토리가 변경됩니다.
새로운 커밋이 추가된 것이 아니라, 마지막 커밋이 수정된 것을 확인할 수 있습니다.
○ 푸시가 완료된 커밋 변경사항 수정하기
사실 위에서 살펴본 커밋 수정의 케이스는, 커밋만 생성하고 푸시가 완료되지 않은 상태이기 때문에 비교적 수월하게(?) 수정이 진행되었습니다. 그럼, 원격 저장소에 푸시까지 진행된 상태에서의 수정(amend)는 어떻게 진행될지 한번 살펴보겠습니다.
우선 위에서 수정해 생성한 [amend.md 파일 생성] 커밋의 푸시를 진행해 보겠습니다.
이제 왼쪽 메뉴의 [파일 생태] 메뉴를 클릭하고, 다시 [커밋 옵션]에서 '마지막 커밋 정정'을 선택해 줍니다. 그리고 자동으로 불러진 "amend.md 파일 생성" 텍스트에 수정 메시지를 추가해 줍니다.
이제 이 상태에서 커밋을 진행하면, 브랜치의 히스토리가 아래와 같이 바뀌어 있습니다. 아래의 히스토리 상태는 간단하게 요약해서 설명해 보자면 로컬 저장소의 [master] 브랜치는 커밋 메시지가 수정되었습니다. 그런데 원격 저장소(origin)의 [master] 브랜치는 "amend.md 파일 생성" 커밋의 상태로 변해 있습니다.
현재 상황은 단순히 커밋 내용이 추가되어서 원격 저장소로 단순히 푸시를 하는 상황이 아닙니다. 그래서 지금은 [강제 푸시]를 해야하는 상황이 됩니다. [도구] > [옵션] 메뉴에서 강제 푸시 사용이 체크되어 있는지 확인합시다.
참고로 rebase때와 마찬가지로, "강제 푸시"는 굉장히 조심해서 사용해야 하므로 본인 혼자 사용하는 브랜치에서만 실행하기를 권합니다.
이제 이 상태에서, [강제 푸시] 체크 옵션을 클릭해 준 다음 푸시를 진행합니다.
강제 푸시를 완료하면, 원격 저장소에 있던 커밋이 수정됩니다.
'Project Management > Git & Github' 카테고리의 다른 글
[Chapter 5] Case Study(3) - cherry pick (0) | 2023.04.18 |
---|---|
[Chapter 5] Case Study(1) - 신규 repository 생성 (0) | 2023.04.10 |
[Chapter 4] 복수의 repository로 협업(2) - rebase 4 (0) | 2023.04.05 |
[Chapter 4] 복수의 repository로 협업(2) - rebase 3 (0) | 2023.04.04 |
[Chapter 4] 복수의 repository로 협업(2) - rebase 2 (0) | 2023.04.01 |