git push한 파일 수정하기

최더디·2021년 12월 22일
0
post-thumbnail

🍕 서론

예전에 작성한 글, "git push한 commit message 수정" 에서는 단순히 커밋 메시지만 수정하는 방법을 소개했다. 오늘은 커밋 메시지만 수정하는 것이 아닌 커밋 메시지도 수정함과 동시에 수정된 파일들을 다시 되돌린 후 PUSH 하는 방법에 대한 글을 작성해보려고 한다.

"이미 push한 내용들을 커밋 메시지만 수정하는 게 아닌 커밋된 내용들도 되돌릴 상황이 있을까?" 라는 생각이을 갖고 있었는데, 내가 직접 경험했다. 테스트를 위해 테스트 아이디와 패스워드를 코드에 임시로 작성했다. Push를 한 후에 PR 올린 나의 코드를 보는데, 해당 부분을 지우지 못하고 PR 올린 것을 알아챘다.

"에잇! 아이디, 패스워드 작성한 부분을 지워야겠다." 라고 생각한 순간 생각했다. "수정을 한 후 다시 push하면 결국 Commit History에 남게 될텐데..?"라는 생각이 들었다. History에 아이디와 패스워드가 남는다면 수정할 이유는 없었다.

그러다 "에잇! PR 지워야겠다.. PR 올린 브랜치를 지우면 되겠지?" 라고 생각해 아래 명령어를 통해 내가 PR 올린 브랜치를 삭제했다.

$ git push origin --delete {branch_name}

그리고 다시 Pull Request 탭에 들어갔는데, 브랜치가 삭제됨으로 인해 Closed 로 되어있고 완전히 삭제되지 않고 브랜치가 삭제되었다는 History가 남았다.

나는 이러한 기록조차 남기고 싶지 않았기 때문에 아래에 작성하는 방법을 사용했다.

주의 사항
아래 내용은 강제적으로 push 하는 방법입니다.
-forcef 명령어는 원격 저장소의 commit들이 유실될 수 있어 굉장히 조심히 사용해야합니다. 원격의 내용을 덮어쓰기 때문에 다른 팀원들이 이미 Local 에 가져갔다면, 가지고 있는 commit log 메시지는 수동으로 수정해야 하는 경우가 발생할 수도 있기 때문에 조심해서 사용하는게 좋습니다.

🍕방법

Commit History를 삭제하기 위해서는 강제로 해당 커밋을 덮어버려야 한다. 내가 찾았을 때 강제로 덮는 방법 말고는 찾지 못했다. (만약 찾았다면 알려주시면 감사하겠습니다.🙇🏻‍♂️)

지금부터 하는 작업들은 모두 PR 올린 브랜치에서 하는 작업입니다.

🫓 1. Commit 을 진행했던 내용을 되돌리기

reset 명령어를 통해 수정하고 싶은 commit 들을 되돌린다.

# 직전의 commit 되돌리기
$ git reset HEAD^

# 여러개의 commit 되돌리기
$ git reset HEAD~{되돌리고 싶은 커밋 개수}

# example) 2개의 commit 내용을 되돌리기
$ git reset HEAD~2

🫓 2. 수정하고 싶은 부분 수정 후 다시 커밋

$ git reset 명령어를 통해 되돌리고 싶은 커밋들을 모두 되돌렸다면 수정하고 싶었던 부분을 수정한다.

내 상황으로 설명하자면, 나는 아이디와 패스워드를 임시로 작성한 부분을 지우고 싶었기 때문에 해당 부분을 지운 후에 다시 $ git commit 을 진행했다.

🫓 3. 강제로 Push

commit → push 순서를 진행하는 것은 똑같다. 단, 다른 것이 있다면 해당 부분을 강제로 Push 해야 한다.
-f 옵션을 통해 현재 커밋한 내용을 다시 강제로 Push 한다. 해당 명령어를 입력하면 기존 commit → push 한 내용들은 사라지고 수정한 commit → 강제 push 한 내용들만 기록에 남겨져 있을 것이다.

$ git push origin -f {branch_name}

🍕 마무리

강제로 Push 한 후에 해당 브랜치를 보게되면 강제로 했다는 기록이 남겨져 있긴하다. 하지만 아이디 패스워드를 남긴 Commit History보다 강제로 Push를 한 후에 해당 내용을 History에 남기지 않았다는게 나에게는 더 중요했다.

Git 관련된 내용들을 계속해서 공부가 필요하다는 것을 느꼈다. 저번에 commit message만 수정하는 방법 관련글을 작성하고 난 후에도 계속해서 새로운 오류들이 발생하기 때문에 Git 관련 공부는 계속해서 개발을 한다면 자주 접해보고 겪어봐야 알 것 같다:)

profile
focus on why

0개의 댓글