본문 바로가기
개발/Git, GitHub

깃허브 데스크탑 - Revert와 Reset으로 과거 커밋으로 되돌아가기 (+ Git Bash)

by 피로물든딸기 2022. 7. 30.
반응형

깃허브 데스크탑으로 프로젝트 관리하기 강의 오픈!! (인프런 바로가기)

 

Git / GitHub 전체 링크

 

Revert는 commit된 파일을 취소하고, 기록을 남긴다.

Reset은 해당 commit의 위치로 이동하고 기록도 날린다.

 

두 명령어를 이용해 과거 commit으로 돌아가보자.


Revert

 

GitHub Desktop에서는 History 탭에서 특정 커밋을 Revert하는 것만 가능하다.

 

정상적으로 revert 된다면(충돌이 없다면) Push origin으로 반영한다.

 

해당 코드의 변경 사항을 보고 싶다면 Revert "main commit test"에서 commit을 취소하면(Undo commit...) 된다.

 

최신 commit 2개를 revert하면 아래와 같이 History에 2개의 로그가 남게 된다.

 

만약 차례대로 revert 하지 않으면 아래와 같이 conflict 경고가 나타날 수 있다.

 

이 경우는 Changes에서 충돌된 코드를 처리하면 된다.


연속 Revert

 

만약 commit을 10개 이전으로 돌리고 싶다면, 매번 revert하는 것이 번거롭다.

이 경우에는 Git Bash에서 처리한다.

 

main commit test ~ main commit은 revert 하였으므로,

commit에서 ver 1.0을 revert하자.

commit 해시ver 1.0 해시가 필요하다.

 

git revert [되돌아갈 hash]..[시작할 hash]로 revert 한다.

$ git revert c348768c..1fe4c6aa
[main d756441a] Revert "commit"
5 files changed, 1 insertions(+), 1 deletions(-)
[main a893741c] Revert "ver 4.0"
5 files changed, 5 insertions(+), 5 deletions(-)
[main 8a7f6592] Revert "ver 3.0"
2 files changed, 2 insertions(+), 2 deletions(-)
[main a6326f77] Revert "ver 2.0"
 1 file changed, 1 insertion(+), 1 deletion(-)

 

아래와 같은 로그가 나오면 :wq!로 닫아주면 된다.

 

원하는 만큼 revert가 되었다. 

 

참고로 ver 1.0 hash에 의해 바로 앞인 ver 2.0까지의 revert임을 의미한다.


Reset

 

git reset은 특정 버전으로 되돌아간다. 

그리고 revert와 달리 History에 기록을 남기지 않는다. (사실 자체를 없애버린다.)

마찬가지로 깃헙 데스크탑에서는 reset을 제공하지 않기 때문에 Git Bash에서 처리한다.

 

 

연속 revert와 마찬가지로 git reset [commit hash]를 하면 바로 앞 까지 reset된다.

그리고 History에서 기록이 사라진다.

 

ver 1.0 = c348768c인 hash로 reset 해보자.

$ git reset c348768c

 

아래와 같이 Pull origin(revert 된 commit)으로 변경되고, History에서 그동안 작업한 로그가 사라진 것을 알 수 있다.

 

여기까지는 로컬이고 그대로 서버(깃헙)에 모두 반영하려면 강제로 반영해야 한다.

데스크탑에서 강제 반영 기능이 없으므로, Git Bash에서 git push origin +main으로 반영한다.

(이 명령어는 되돌릴 수 없으므로 신중하게 해야 한다.)

$ git push origin +main
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/substrawberry/git_project.git
 + a6326f77...c348768c main -> main (forced update)

 

이제 GitHub에 들어가 프로젝트의 로그를 확인해보자.

ver 1.0 앞의 커밋이 모두 사라진 것을 알 수 있다. 


특정 파일만 되돌리는 기능Git Bash에서만 사용 가능하다.

반응형

댓글