GIT

Revert, Reset

베스트오버 2023. 6. 19. 12:11

리버트(Revert)와 리셋(Reset)

리버트(Revert)

  • 리버트는 커밋을 취소하는 새로운 커밋을 생성합니다. 이전 커밋을 되돌리는 과정에서 이전 커밋의 변경 내역을 보존합니다.
  • 즉, 리버트는 현재 작업 중인 브랜치에 새로운 커밋을 생성하여 이전 커밋의 변경 내용을 취소합니다. 이전 커밋의 변경 내용을 되돌릴 수 있지만, 커밋 히스토리에는 이전 커밋과 리버트 커밋이 함께 남게 됩니다.
  • 리버트는 공유된 저장소에서 다른 개발자들과 협업할 때 유용합니다. 이미 공유된 커밋이 있을 경우, 리버트를 통해 변경 내용을 되돌릴 수 있고, 다른 개발자들이 해당 변경 내용을 볼 수 있습니다.
  • 리버트 커밋을 생성할 때 충돌이 발생할 수 있다는 점을 주의해야합니다. 리버트를 수행하면서 달느 개발자가 같은 파일 또는 동일한 부분을 수정하고 커밋한 경우 충돌이 발생할 수 있습니다. 충돌을 해결하기 위해 추가 작업이 필요 할 수 있으므로, 충돌을 확인하고 해결하는 절차를 따라야 합니다.

 

리셋(Reset)

  • 리셋은 커밋 히스토리를 변경하여 이전 상태로 되돌리는 동작입니다. 이전 커밋의 변경 내용을 삭제하거나 재배치하는 등의 작업을 수행합니다.
  • 리셋은 보통 로컬에서 개인적인 작업을 할 때 주로 사용됩니다. 이전 커밋을 삭제하거나 커밋 히스토리를 정리하고자 할 때 유용합니다.
  • 리셋은 세 가지 모드(옵션)을 가지고 있습니다.
    • --soft: 이전 커밋을 삭제하지 않고, 이전 커밋 상태로 되돌립니다. 인덱스와 작업 디렉토리는 이전 상태로 유지됩니다.
    • --mixed(기본값): 이전 커밋을 삭제하고, 이전 상태로 되돌립니다. 인덱스는 초기화되지만, 작업 디렉토리는 이전 상태로 유지됩니다.
    • --hard: 이전 커밋을 삭제하고, 이전 상태로 되돌립니다. 인덱스와 작업 디렉토리가 모두 초기화되어 이전 상태로 돌아갑니다.
  • 리셋을 통해 이전 커밋을 삭제하면 해당 커밋의 변경 내용은 완전히 사라집니다. 따라서, 리셋을 사용하기 전에 삭제하려는 커밋이 실제로 필요 없는지, 그리고 다른 개발자들과의 협업에 어떤 영향을 미칠 수 있는지 고려해야 합니다.
  • 또한, 리셋은 로컬 저장소에만 영향을 미칩니다. 리셋된 상태에서 다시 푸시하면 공유된 원격 저장소의 커밋 히스토리는 변하지 않습니다. 다른 개발자들과 협업하는 경우, 리셋된 커밋을 푸시하기 전에 협의하고 공유된 저장소의 커밋 히스토리를 정리하는 것이 좋습니다.