본문 바로가기
Program Development Tips/Git

[Git] 협업에서 Remote Repository에 올라간 커밋 취소하기: git revert vs git reset

by Maccrey Coding 2024. 8. 27.
반응형

 

협업 환경에서 Git을 사용하다 보면, 원격 저장소(remote repository)에 푸시(push)한 커밋을 취소하거나 수정해야 할 상황이 발생할 수 있습니다.

이런 상황에서는 커밋을 어떻게 처리할지 신중히 결정하는 것이 중요합니다.

특히, 원격 저장소에 이미 올라간 커밋을 취소하는 방법으로 git revert와 git reset이 있으며, 각각의 적절한 사용 방법과 이유를 이해하는 것이 필요합니다.

1. git revert로 커밋 취소하기

git revert는 원격 저장소에 푸시된 커밋을 안전하게 취소하는 방법입니다.

이 명령어는 기존 커밋을 제거하는 대신, 기존 커밋을 반대로 적용하는 새로운 커밋을 생성합니다.

즉, 실질적으로는 기존 변경 사항을 되돌리는 새 커밋을 추가하는 것입니다.

사용 방법

git revert 커밋해시

예를 들어, 다섯번째 커밋을 되돌리고 싶다면 다음과 같이 입력합니다.

git revert 다섯번째 커밋 해시

이렇게 하면 다섯번째 커밋의 변경 사항을 반영하는 새로운 커밋이 생성됩니다.

이후 이 변경 사항을 원격 저장소에 푸시하면, 원격 저장소에서도 해당 커밋의 변경 사항이 되돌려진 것을 확인할 수 있습니다.

장점

  • 안전성: 이미 원격 저장소에 푸시된 커밋을 안전하게 취소할 수 있습니다. 커밋을 제거하지 않고, 변경 사항을 되돌리는 새로운 커밋을 추가하므로, 다른 팀원들과의 협업에 영향을 미치지 않습니다.
  • 협업에 적합: 팀원들이 공동으로 작업하는 브랜치에서 사용하기 적합하며, 히스토리의 일관성을 유지합니다.

2. git reset과 그 사용 제한

git reset은 커밋을 취소하거나 되돌리는 방법 중 하나지만, 원격 저장소에 푸시된 커밋을 수정하거나 제거할 때는 주의가 필요합니다.

사용 방법

git reset --hard 커밋해시

이 명령어를 사용하면 현재 브랜치의 커밋을 커밋해시로 되돌리며, 작업 디렉토리와 스테이징 영역도 해당 커밋의 상태로 변경됩니다.

git reset --hard 네번째 커밋 해시

만약 Remote Repository에 다섯번째 커밋까지 git push가 된 상태에서 위와 같이 git reset을 한다면 git push를 할 수 없게 됩니다.

왜냐면 Remote Repository에 최신 커밋인 다섯번째 커밋이 존재하기 때문에 아래와 같이 git pull을 하고 난후에 git push를 하라는 메시지가 나오게 됩니다.

 

문제점

  • 히스토리 변경: git reset은 히스토리를 변경하므로, 원격 저장소에 푸시된 커밋을 제거하게 됩니다. 이 경우, 로컬과 원격 저장소의 히스토리가 불일치하게 되어, 협업 중인 팀원들에게 혼란을 줄 수 있습니다.
  • 강제 푸시 필요: 원격 저장소에 푸시된 커밋을 제거하려면 git push --force를 사용해야 합니다. 이는 협업 시 다른 팀원들의 작업을 덮어쓸 수 있어 매우 위험합니다.
git push --force

 

주의사항

  • 협업 중인 브랜치에서는 사용 금지: 이미 푸시된 커밋을 git reset으로 수정한 후 강제로 푸시하는 것은 협업에 심각한 영향을 미칠 수 있습니다. 팀원들이 해당 브랜치를 기반으로 작업을 진행 중일 때는 사용을 피해야 합니다.
  • 위험성: 다른 팀원들이 작업 중인 브랜치에서 강제 푸시를 사용하는 경우, 그들의 로컬 작업이 손실될 수 있습니다.

3. 협업에서의 커밋 취소 방법

협업 환경에서 원격 저장소에 푸시된 커밋을 취소할 때는 git revert를 사용하는 것이 안전하고 적절합니다.

git revert는 기존 커밋을 반대로 적용하는 새로운 커밋을 생성하여, 팀원들과의 협업에 영향을 주지 않으면서도 변경 사항을 되돌릴 수 있습니다.

 

반면, git reset은 커밋 히스토리를 변경하므로 협업 환경에서는 신중하게 사용해야 합니다.

원격 저장소의 커밋을 되돌릴 때는 강제 푸시로 인해 발생할 수 있는 위험을 감수해야 하며, 이는 협업에 큰 영향을 미칠 수 있습니다.

 

따라서, 팀원들과의 협업을 고려하여 커밋 취소 작업을 안전하게 진행하는 것이 중요하며, git revert를 통해 신뢰할 수 있는 방법으로 작업을 처리하는 것이 좋습니다.

 

공감과 댓글은 저에게 큰 힘이 됩니다.

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

반응형