무작정 개발.Vlog

[IntelliJ] 인텔리제이 커밋 취소, Undo commit, Revert commit

by 무작정 개발
반응형

개요

오랜만에 git을 사용하게 되며, 헷갈리는 부분과 이후 실무를 진행하며 꼭 필요한 사항이라 인텔리제이에 있는 기능 및

git 명령어인 Undo commit, Revert commit에 대해  정확히 동작 방식을 알고 사용하기 위해 작성하게 되었습니다.

2가지 명령어를 commit을 취소하는 명령어인데 조금 다르게 동작하기에 명확히 차이점을 알고 있어야 합니다.

 

필자는 현재 다니고 있는 회사에 입사 후 첫 개발 업무를 진행하면서 Revert commit 명령어를 잘 모르는 상태에서
잘못 사용해서 소스를 유실시킨 경험이 있습니다..ㅎ

 

이번 글은 인텔리제이(IntelliJ)와 Git이 연동된 상태 기준으로 글을 작성하였습니다.

IntelliJ + Git 연동 방법에 대한 내용은 아래의 글을 참고하면 되고, 깃허브(GitHub), 깃랩(GitLab) 모두 사용 방법은 동일합니다.

[IntelliJ] 인텔리제이 GitHub 연동

 

[IntelliJ] 인텔리제이 GitHub 연동

이번에는 인텔리제이에 깃허브(GitHub) 연동하는 방법에 대해 정리할 것이다. 깃허브를 연동하기위해서는 Token 값이 필요한데 Token 생성 방법은 맨 하단에 정리할 것이다. 다음 글에서는 프로젝트

backendcode.tistory.com

 

우선 Git이 연동된 기준으로 인텔리제이(IntelliJ) 좌측 하단을 보면 아래의 화면처럼 git log 창을 열 수 있고, 해당 로그에서

각 브랜치 별로 커밋 내역을 볼 수 있습니다.

[IntelliJ] git log 및 커밋 내역
[IntelliJ] git log 및 커밋 내역


⚠️ 주의할 사항

이 글은 지역 저장소(Local Repository) 기준으로 실습을 진행하였습니다.
지역 저장소(Local Repository)와 원격 저장소(Remote Repository) 차이점에 대해 잘 모르면 한번 찾아보시고 이 글을

읽어주시면 감사합니다!

[IntelliJ + Git] Local, Remote 저장소 차이점
[IntelliJ + Git] Local, Remote 저장소 차이점

 

또한 [ Undo commit ]과 커밋 메시지 변경(amend)은 지역 저장소에 commit 후 원격 저장소에 이미 Push 된 후에 명령어들을 적용할 경우 원격 저장소에 공유된 commit을 변경하려는 시도로, 다른 개발자와 협업을 진행하는
상태라면 추후에 병합(Merge) 작업 등 협업에 문제가 생길 수 있습니다.

 

따라서 이미 원격 저장소에 이미 Push가 진행된 상태인 commit을 수정하고 싶다면, [ Undo commit ] 대신 변경된 사항을

새로운 commit으로 추가하는 [ revert commit ] 명령어 방법을 추천합니다.

해당 명령어를 적용하면 원격 저장소를 안전하게 유지하면서 이전 commit을 수정할 수 있습니다.

 

반응형

git commit 취소 2가지 방법

위에서 한번 언급했지만 이미 인텔리제이 + git을 사용할 때 커밋(commit)을 취소하는 기능은 아래 2가지가 있습니다.

  • Undo Commit
  • Revert Commit

[IntelliJ + Git] Undo commit, Revert commit
[IntelliJ + Git] Undo commit, Revert commit

 

위 2가지 모두 이전 커밋의 변경 사항(커밋 기록)을 제거(취소)하지만 다른 점이 있습니다.

바로 커밋을 취소할 때 새로운 커밋을 생성 여부가 있습니다.

 

(1) Undo Commit

[ Undo Commit ] 명령을 수행하면 선택한 커밋을 제거 및 커밋 기록까지 삭제합니다.

즉, 작업 트리(Working Tree)를 이전 상태로 되돌리게 됩니다. 해당 명령은 로컬 저장소(Local Repository)에서만 커밋을

취소하는 명령이며 원격 저장소(Remote Repository)에는 영향을 주지 않습니다.

인텔리제이 - Undo Commit 기능을 git 명령어인 git reset 명령어를 사용하여 구현됩니다.

 

[IntelliJ] Undo commit 실습
[IntelliJ] Undo commit 실습

필자는 Undo commit 테스트를 위해 TestClass 클래스를 생성 후 Local Repository에 커밋하였습니다.

해당 커밋을 Undo commit 명령을 사용하여 커밋을 취소할 것입니다.

 

[실습 1]

  1. 취소할 커밋 선택 및 마우스 우 클릭
  2. Undo Commit 클릭

[IntelliJ] Undo Commit 실습 1
[IntelliJ] Undo Commit 실습 1

[실습 1] 순서대로 진행하면 위 화면과 같이 [Select Target Changelist] 팝업 창이 출력됩니다.

여기서 바로 [Ok] 버튼을 누르면 선택한 커밋 기록이 삭제됩니다.

 

위 팝업 창을 보면 Name에 Changes가 선택된 것을 볼 수 있습니다. Changes는 인텔리제이에 git을 연동하였을 때

커밋하지 않은 변경 내역을 관리할 수 있게 해 줍니다. [ Undo Commit ]을 수행하면 위 Changes에 커밋을 취소하고

해당 커밋에서 변경된 내역들을 Changes에 들어갑니다.

 

이제 [Ok] 버튼을 클릭해서 커밋을 취소합니다.

 

[IntelliJ] Undo Commit 결과
[IntelliJ] Undo Commit 결과

위 화면은 [Undo Commit] 명령 수행 결과 즉, 커밋을 취소한 결과입니다.

[ Undo commit 테스트를 위해 커밋 ] 메시지로 작성된 커밋 내역이 지역 저장소(Local Repository)에서 삭제가 되고,

해당 커밋에 들어있던 변경 내역이 [Changes]에 들어간 것을 볼 수 있습니다.

 

즉, 커밋을 취소하면서 해당 커밋 기록까지 삭제 후 이전 작업 트리(Working Tree)로 되돌린 것을 볼 수 있습니다.

 

(2) Revert Commit

위 [ Undo Commit ]을 보면 커밋을 취소함과 동시에 커밋 내역까지 삭제하는 것을 볼 수 있습니다.

반면, [ Revert Commit ] 은 기존 커밋 내역을 그대로 유지하는 동시에 해당 커밋을 되돌리기 위해 새로운 커밋을 생성합니다.

쉽게 말하자면 커밋 취소할 내역을 그대로 남기고, 해당 커밋의 작업 내역을 취소(이전 상태로 되돌리는 것)하는

새로운 커밋을 생성한다고 말할 수 있습니다.

물론 작업 트리(Working Tree)에도 Revert Commit을 사용한 기록에 남게 됩니다.

인텔리제이 - Revert Commit 기능을 git 명령어인 git revert 명령어를 사용하여 구현됩니다.

 

[IntelliJ] Revert Commit 실습 1
[IntelliJ] Revert Commit 실습 1

이전과 동일하게 TestClass 생성 후 Revert 테스트를 위해 커밋해 둔 상태입니다.

[ Reveret Commit ] 은 위 [ Undo Commit ]과 다르게 클릭하면 즉시 실행됩니다.

 

[실습 2]

  1. 취소할 커밋 선택 및 마우스 우 클릭
  2. Revert Commit 클릭

[IntelliJ] Revert Commit 결과
[IntelliJ] Revert Commit 결과

위 화면은 [ Revert Commit ] 명령 수행 결과 화면입니다.

[ Undo Commit ]과 다른 점을 볼 수 있습니다. 우선 커밋 기록이 삭제되지 않고, Revert 명령을 수행한 새로운 커밋 기록이

생긴 것을 볼 수 있습니다. 다음으로 취소한 커밋 내역에 있는 변경 사항들이 [Changes]에 들어가지 않고 삭제되는 것을

볼 수 있습니다.

 

만약 [ Revert Commit ]을 실수로 잘못 눌렀다면 Revert 수행 후 생긴 커밋 내역 기준으로 다시 [ Revert Commit ]을 실행하면 다시 원상 복구가 가능합니다.

 

반응형

블로그의 정보

무작정 개발

무작정 개발

활동하기