4-1.Git 버전 롤백(Git bash 버전 되돌리기)

2023. 2. 8. 22:31Git

기본 명령어

- git reset --hard (돌아갈 커밋 해시)
- git reset --hard 뒤에 커밋 해시가 없으면 마지막 커밋을 가리킴
- git revert (되돌릴 커밋 해시) 
- git revert --no-commit (되돌릴  커밋 해시)
   ㄴ원하는 다른 작업을 추가한 다음 함께 커밋
   ㄴ 취소하려면 git reset --hard

- git rm leopards.yaml 파일삭제
- git revert --continue (git revert 시 충돌 났을 때, 추가,삭제 등등으로 해결하고 이어하기 처리)

 

--주의

.git 일단 백업 해놓을 것

 

Git에서 과거로 돌아가는 두 방식

  • reset : 원하는 시점으로 돌아간 뒤 이후 내역들을 지웁니다.
  • revert : 되돌리기 원하는 시점의 커밋을 거꾸로 실행합니다. 

    revert는 커밋 시점 중 한 한개의 시점만 삭제하고 싶을 때(부분취소) 용이함.

 

실습

.git 일단 백업 해놓을 것

.git 삭제 전

 

 

.git 삭제 후

 

$ git status

======================================
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        ../aa.js
        ../ad.js
        ../calendar-19/
        ../dfd.js
        ./
        ../html.html
        ../yalco/

nothing added to commit but untracked files present (use "git add" to track)

======================================

나는 vsCode 폴더가 .git 파일이여서 이미자와 다르게 뜨는것 같다.

도아니고 좀 결과가 다르게나온다.

 

git 과거버전으로 이동

 

$ git log

========================================================
commit 6737dd64b4643376d132a726348c974d89d652cd (HEAD -> main)
Author: dhlee <ldh2481@gmail.com>
Date:   Wed Feb 8 00:08:59 2023 +0900

    Replace Cheetas with Panthers

commit 1906affed749b327481ceb0b3b75f06a606585f3
Author: dhlee <ldh2481@gmail.com>
Date:   Wed Feb 8 00:07:03 2023 +0900


    Add team Cheetas

 

..... (J로 아래이동 , K로 위로이동)

2. reset 사용해서 과거로 돌아가기

아래 명령어로 커밋 내역 확인

git log
  • 되돌아갈 시점: Add team Cheetas의 커밋 해시 복사
  • :q로 빠져나가기
git reset --hard (돌아갈 커밋 해시)
  • reset의 옵션(--hard 등)은 섹션 5에서 다룰 것

돌아갈 부분 1906affed749b327481ceb0b3b75f06a606585f3 복사

 

끝까지 할 필요는 없고 1906affe 만 해도 충분

 

$ git reset --hard 1906affed749b327481ceb0b3b75f06a606585f

========================================================

HEAD is now at 1906aff Add team Cheetas

========================================================

 

git을 초기 깃으로 변경 하고

.git 파일 삭제 후 백업파일로 되돌리기!

파일과 히스토리가 맞지 않음!. git log도 마찬가지

 

3. reset 하기 전 시점으로 복원해보기

백업해 둔 .git 폴더 사용

  • .git 폴더 복원
  • git log, git status로 상태 확인
  • 아래 명령어로 현 커밋 상태로 초기화
git reset --hard
  • 💡 뒤에 커밋 해시가 없으면 마지막 커밋을 가리킴
  • lions.yaml 삭제

$ git status

========================================================

On branch main  
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        lions.yaml

nothing added to commit but untracked files present (use "git add" to track) 

========================================================

reset 이후  lions.yaml 파일은 새로 등록된 파일로 보고있음

lions.yaml 수동 삭제

 

$ git status

========================================================
On branch main
nothing to commit, working tree clean

========================================================

4. revert 로 과거의 커밋 되돌리기

Add George to Tigers의 커밋 해시 구하기

아래 명령어로 revert

git revert (되돌릴 커밋 해시)
  • :wq로 커밋 메시지 저장

$ git revert 71754e1
[main 6ed7c8f] Revert "Add George to Tigers"
 1 file changed, 1 insertion(+), 2 deletions(-)

 

여러글들이 나오는데 :qw 로 저장후 종료 처리

반대로 실행된 것을 볼 수 있음

 

🎯 Replace Lions with Leopards의 커밋 되돌려보기

  • 이후 leopards.yaml 수정한 내역 때문에 충돌
    • git rm leopards.yaml로 Git에서 해당 파일 삭제
    • git revert --continue로 마무리
    • :wq로 커밋 메시지 저장

 

삭제와 수정이랑 여러가지가 겹쳐서 이슈 발생

 

$ git revert d1054fa 

========================================================

CONFLICT (modify/delete): leopards.yaml deleted in parent of d1054fa (Replace Lions with Leopards) and modified in HEAD.  Version HEAD of leopards.yaml left in tree.
error: could not revert d1054fa... Replace Lions with Leopards
hint: After resolving the conflicts, mark them with
hint: "git add/rm <pathspec>", then run  << 추가하거나 삭제하라고 함.
hint: "git revert --continue".   <<아직 모르겠음, 이어가기인가 ?..
hint: You can instead skip this commit with "git revert --skip".
hint: To abort and get back to the state before "git revert",
hint: run "git revert --abort".

========================================================

 

$ git rm leopards.yaml

========================================================
rm 'leopards.yaml'

========================================================

 

$ git revert --continue

========================================================
[main 1bd28a0] Revert "Replace Lions with Leopards"
 3 files changed, 9 insertions(+), 9 deletions(-)
 delete mode 100644 leopards.yaml
 create mode 100644 lions.yaml

========================================================

:qw 로 마무리

 

reset 사용해서 revert 전으로 되돌아가기

$ git reset --hard 6737dd6

========================================================
HEAD is now at 6737dd6 Replace Cheetas with Panthers

========================================================

 

 

💡 커밋해버리지 않고 revert하기

git revert --no-commit (되돌릴 커밋 해시)
  • 원하는 다른 작업을 추가한 다음 함께 커밋
  • 취소하려면 git reset --hard