Commit 내역 확인
Commit을 제거하기 위해 먼저 Commit 내역을 확인해야 한다. 아래 명령어를 이용해 Commit 내역을 확인할 수 있고, 로컬과 원격 브랜치의 HEAD가 해시값이 e138932인 Commit에 위치함을 확인할 수 있다.
$ git log

로컬 브랜치의 Commit 되돌리기
Commit을 제거하기 위해서는 먼저 현재 HEAD의 위치를 옮겨야 한다. 아래 명령어를 통해 로컬 브랜치의 HEAD를 이전 Commit으로 되돌릴 수 있다. 현재 위치한 HEAD에서 1개의 Commit만 되돌리고 싶다면 ^를 사용하면 되고 현재 HEAD가 위치한 Commit을 포함해 n개의 Commit을 되돌리고 싶으면 ~{n}를 사용하면 된다. 아래 명령어를 활용해 1개의 Commit을 되돌린 후 로컬 브랜치의 HEAD가 해시값이 981c0f3인 Commit으로 이동했다. 원격 브랜치의 HEAD는 아직 해시값이 e138932인 Commit에 위치하고 있을 것이다.
$ git reset HEAD^
$ git reset HEAD~{n}

원격 브랜치의 Commit 되돌리기
로컬 브랜치의 HEAD를 이전 Commit으로 되돌렸으니 이제 로컬 브랜치의 변경사항을 원격 브랜치에 반영하면 된다. push 명령어를 실행하면 로컬 브랜치의 HEAD가 원격 브랜치보다 뒤에 있어 Fast-Forward를 준수하지 않기 때문에 거절 당한다. Commit을 되돌리는 작업이기 때문에 Fast-Forward 예외가 발생하는 것이 당연하다. 이를 해결하기 위해 force 옵션을 추가해 push 명령어를 실행하면 된다.
$ git push -f


로컬 브랜치의 변경사항을 원격 브랜치에 반영 후 다시 Commit 내역을 확인한 결과는 아래와 같다. 로컬과 원격 브랜치의 HEAD가 모두 해시값이 981c0f5에 위치하고 있는것을 확인할 수 있다. 삭제한 Commit은 되돌릴 수 없으니 주의하도록 하자.

되돌린 Commit 복구하기
Commit을 제거하기 위해 reset 명령어를 실행하다가 실수로 의도하지 않은 Commit으로 HEAD의 위치를 변경했을때, HEAD의 위치를 원래 위치로 되돌리는 방법은 원격 브랜치의 작업 내용을 가져오는 pull 명령어를 사용하는 것이다. 그러기 위해서 먼저 로컬 브랜치의 HEAD위치를 이전 Commit으로 되돌리면서 생긴 변경사항을 초기화 해야한다. 그런 다음 로컬 브랜치의 HEAD를 원격 브랜치의 HEAD로 다시 옮긴다. 복구 후 Commit 내역을 확인하면 HEAD가 원래 위치로 돌아와있음을 확인할 수 있다.
$ git stash
$ git pull origin master


Commit 내역 확인
Commit을 제거하기 위해 먼저 Commit 내역을 확인해야 한다. 아래 명령어를 이용해 Commit 내역을 확인할 수 있고, 로컬과 원격 브랜치의 HEAD가 해시값이 e138932인 Commit에 위치함을 확인할 수 있다.
$ git log

로컬 브랜치의 Commit 되돌리기
Commit을 제거하기 위해서는 먼저 현재 HEAD의 위치를 옮겨야 한다. 아래 명령어를 통해 로컬 브랜치의 HEAD를 이전 Commit으로 되돌릴 수 있다. 현재 위치한 HEAD에서 1개의 Commit만 되돌리고 싶다면 ^를 사용하면 되고 현재 HEAD가 위치한 Commit을 포함해 n개의 Commit을 되돌리고 싶으면 ~{n}를 사용하면 된다. 아래 명령어를 활용해 1개의 Commit을 되돌린 후 로컬 브랜치의 HEAD가 해시값이 981c0f3인 Commit으로 이동했다. 원격 브랜치의 HEAD는 아직 해시값이 e138932인 Commit에 위치하고 있을 것이다.
$ git reset HEAD^
$ git reset HEAD~{n}

원격 브랜치의 Commit 되돌리기
로컬 브랜치의 HEAD를 이전 Commit으로 되돌렸으니 이제 로컬 브랜치의 변경사항을 원격 브랜치에 반영하면 된다. push 명령어를 실행하면 로컬 브랜치의 HEAD가 원격 브랜치보다 뒤에 있어 Fast-Forward를 준수하지 않기 때문에 거절 당한다. Commit을 되돌리는 작업이기 때문에 Fast-Forward 예외가 발생하는 것이 당연하다. 이를 해결하기 위해 force 옵션을 추가해 push 명령어를 실행하면 된다.
$ git push -f


로컬 브랜치의 변경사항을 원격 브랜치에 반영 후 다시 Commit 내역을 확인한 결과는 아래와 같다. 로컬과 원격 브랜치의 HEAD가 모두 해시값이 981c0f5에 위치하고 있는것을 확인할 수 있다. 삭제한 Commit은 되돌릴 수 없으니 주의하도록 하자.

되돌린 Commit 복구하기
Commit을 제거하기 위해 reset 명령어를 실행하다가 실수로 의도하지 않은 Commit으로 HEAD의 위치를 변경했을때, HEAD의 위치를 원래 위치로 되돌리는 방법은 원격 브랜치의 작업 내용을 가져오는 pull 명령어를 사용하는 것이다. 그러기 위해서 먼저 로컬 브랜치의 HEAD위치를 이전 Commit으로 되돌리면서 생긴 변경사항을 초기화 해야한다. 그런 다음 로컬 브랜치의 HEAD를 원격 브랜치의 HEAD로 다시 옮긴다. 복구 후 Commit 내역을 확인하면 HEAD가 원래 위치로 돌아와있음을 확인할 수 있다.
$ git stash
$ git pull origin master

