지옥에서 온 Git

과거의 버전으로 돌아가기

수업소개

버전관리의 중요한 효용은 과거의 상태로 돌아갈 수 있다는 점입니다. 여기서는 이 방법에 대해서 알아봅니다. 한가지 주의하실 점은 과거로 돌아가는 작업은 위험한 작업입니다. 여기서는 과거로 돌아가는 방법이 있다는 점만 우선 확인하시고, 실제로 사용할 때는 좀 더 깊게 공부하고 사용하시는 것이 좋습니다. 

수업

수업에서 사용한 명령

아래 명령은 버전 id로 돌아가는 명령입니다. 

git reset --hard "버전 id" 

버전 id의 커밋을 취소한 내용을 새로운 버전으로 만드는 명령

git revert "버전 id"

참고

reset과 revert의 차이점에 대해서 재미있게 설명하는 카툰입니다. 

http://www.popit.kr/

댓글

댓글 본문
  1. CrashOverride
    댓글을 남기셨던 시점에는 'git reset' 또는 'git reset 파일명'으로 unstage를 주로 했던 것 같은데
    답글을 남겨보는 24년 9월 현시점에는 'git restore --staged 파일명'을 사용하게끔 git이 안내를 해주네요.

    ---
    On branch master
    Changes to be committed:
    (use "git restore --staged <file>..." to unstage)
    new file: test2.txt
    ---
    요릏게
    대화보기
    • 20210613
    • 장휴일
      git reset "id" --hard

      hard는 이해하기 쉽지만 위험한 방법!
      hard 외에도 soft, mashed 등이 있다. 나중에 배움.

      git revert "id"

      커밋을 취소하면서 새로운 version을 생성하는 것. 나중에 배움.
    • 박병진
      2021.02.02 완료
    • ㄹㄹ
      혹시 레포지토리를 막 만든 상태로 돌아가는 방법은 없는 건가요?ㅠㅜ
    • 이수빈
      완료했습니다!
    • park
      정말 눈높이 교육 존경합니다 .

      부담을 확확 줄여주시네요
      감사합니다 좋은 강의 올려주셔서
    • supernet
      완료!!
    • git rm
      대화보기
      • 빽토리얼
        git reset "버전의 고유주소" -- hard : 그 때의 버전으로 돌아갈 수 있다.
        git revert "버전의 고유주소" : 버전 id의 커밋을 취소한 내용을 새로운 버전으로 만드는 명령(아직 몰라도 됨ㅋ)
      • 사겅이
        git reset --hard ''
      • PassionOfStudy
        git에서는 commit을 되돌릴 수 있는 기능이 있다.

        reset과 revert이다.

        reset은 git reset -- hard "버전 id"
        revert는 git revert "버전 id"
        명령어를 이용하여 commit을 되돌릴 수 있다.
      • moon
        감사합니다.
      • 내일
        git commit을 되돌릴 수 있다면 git add 작업을 되돌리는 방법도 있나요??
      • 누러버
        2018.06.01

        잘 보고 갑니다 감사드립니다.
      • Deuklyoung Ko
        감사합니다.

        전에 중간 부터 살짝 강의 보았을 때는 좀 복잡해 보였는데, 순서대로 보니 이해가 쉽네요.
      • 잘보고가요!!! 감사합니다ㅎㅎ
      • git reset <commit id>--hard를 하면
        디렉토리에 추가된 파일들도 삭제되고
        없어진 파일들도 복원되고
        수정됭 파일들도 복원되네요.

        git revert는 실행해보니...뭐가뭔지 빨리 다음편을 봐야 알겠습니다..
      • 모두들 재미있게 공부하는 군요. 저도 더 열심이 해야 하겠습니다.
      • 동자
        2018-02-19 월
        구정 연휴가 끝나고 퇴근 후 오랜만에 공부를 하려했건만
        김이사님이 방문하셔서 예정에 없던 회식을 하게되었다
        뭐 그 덕분에 한우를 냠냠하긴 했지만,
        계획했던 스터디 일정에 차질이 생겼다.
        하지만, 회식 후 남는 시간을 아깝게 여긴 나는
        다시 카페로 향하여 남는 시간을 쪼개어 공부를 시작!
        저번에는 zsh을 설치하고 이것저것 만져보느라
        log를 남기진 못했지만, 개발환경을 세팅하고
        조금 개발자스러운 터미널을 만지게 되었다 캬캬.

        오늘의 study 정리
        로그에서 출력되는 버전 간의 차이점을 출력하고 싶을 때
        git log -p
        버전 간의 차이점을 비교할 때
        git diff 'commit hashcode 1'..'commit hashcode 2'
        git add 하기 전과 add 후의 파일 내용을 비교할 때
        git diff

        git 에는 commit 을 되돌리는 명령어가 두가지가 있다
        git reset --hard 'commit hashcode'
        : 이것은 로컬의 커밋 내용을 아예 삭제하는 것이다. 기록도 남지 않는다
        하지만, 웹 저장소에 푸쉬한 후에는 사용해봤자 의미가 없다.
        업데이트가 뒤쳐진 상태로 변하게 될 뿐이니,
        로컬에서 푸쉬 전 잘못된 커밋을 되돌리는 경우에만 사용하도록 하자.
        git revert 'commit hashcode'
        : 이것은 reset 명령어 처럼 해당 버전으로 되돌아 가긴 하지만,
        지워진 버전의 기록이 흉터처럼 남는다.
        웹에 푸쉬한 이후에도 그전 커밋 기록이 남고 새로운 버전으로 선언하기에
        revert 명령어로 되돌아간 버전이 최신버전으로 인식되게 하며
        다른 사용자로 하여금 업데이트를 받게 한다.

        git 명령의 빈도 수
        공부하는 방법에 대한 토크..
        내가 이미 알고있는 배경지식을 이용하여
        새로운 지식을 알아내는 방법만 안다면
        전체적인 지식을 습득하는데 어려움이 적다.

        매번 수정하고 add 후 커밋메시지를 적고 커밋하는게 귀찮아짐

        git commit --help 후 명령어에 대한 도움말을 본다.
        화살표로 스크롤 할 수 있음.
      • devchun
        감사합니다.
      • 제로스
        감사합니다.
      • 이유리
        감사합니다.
      • 황지현
        "지옥에서 온 Git" 강의를 보았던 개발자입니다.
        제가 블로그에 정리한 내용을 공유합니다^^

        gitlab, bitbucket, pull request, opensource contribution에 관심이 많으신 분은 도움이 되실거라고 생각합니다.
        제 블로그에 방문하셔서 많은 댓글 부탁드립니다.ㅎㅎ

        [TIP] reset 명령을 이용한 undo 하기
        http://jhhwang4195.tistory.com......693
      • 오빠는다르다
        감사합니다
      • 함성재
        감사합니다.
      • haMsa
        감사합니다. 만화를 봐도 아직 잘 이해가 되지 않는데 이 후 이해할 수 있을 거라 믿고(!) 있겠습니다.
      • 최현승
        감사합니다.
      • orez
        정리 감사드립니다 ㅠㅠ! 스스로 정리하는데, 큰 도움을 받고 있습니다.
        대화보기
        • 알파고
          감사합니다.
        • 김세창
          아주 잘 배워갑니다~~^^ ㅎㅎ
        • 김수현
          과거의 버젼으로 돌아가는 방법이 하나 더 있더군요.
          이곳 수업에서 나옵니다.

          [원격 저장소를 지역 저장소로 복제(Github)] 수업에서 나옵니다.
          그곳 수업에서는 과거 첫번째 버젼으로 돌아가는 방법이 나옵니다.

          아래가 방법입니다.
          git checkout ID (과거로 돌아가는 방법)

          위에서 ID는 79621d01fdfcfd6ceb5d915a15567139711cc8b8과 같이 써있는 아이디를 말합니다.
          checkout 명령은 뒤 브랜치부분수업에서 배울 내용으로 새로운 가지가 만들어져 있을 때
          그 가지속으로 들어가는 명령입니다.

          위에서는
          새로운 가지를 만듬과 동시에 그곳으로 이동하는 명령으로 사용되었습니다.
          위와 같이 명령을 하고 가지속에 들어가서 파일을 보면...과거 버젼의 파일이 존재하는 것을 확인할 수 있습니다.

          이런 내용도 있네요.
          체크아웃 대상은 브랜치, 커밋, 그리고 태그입니다. 체크아웃을 통해 과거 여러 시점의 소스코드로 이동할 수 있습니다. https://tuwlab.com......202 <---checkout이 과거 시점으로 이동하는 방법이다라고 써 있네요.

          -----------------------------------------
          SourceTree 프로그램을 이용하여 Git을 사용할 경우
          https://opentutorials.org......043 <-- 커밋을 한 후 커밋하기전 상태로 변경하는 강의입니다.
        • 김수현
          또다른 효용 과거로 돌아갈 수 있다.
          커밋을 취소하는 명령 > 어려움+주의해서 해야 함
          5에서 3으로 돌아가고 싶은 경우 > 2가지 방법 있음
          reset Vs revert
          디렉토리의 전체 내용을 복사한 후 > 정 돌아가기 힘들다 할 경우 > 다시 복사 붙여넣기 해서 복원할 수도 있음
          사고를 방지해야 함 (신중히, 연습이 많이 필요)
          5와 4를 삭제후 3으로 돌아가고 싶은 경우
          git reset ID(돌아가고 싶은) 79621d01fdfcfd6ceb5d915a15567139711cc8b8 --hard
          git log
          4번과 5번이 사라짐
          vim f1.txt
          q
          vim f2.txt
          q
          git은 왠만하면 없애지 않음 없는 것 처럼 보이지만 남아 있다.
          나중에 복구할 수 있음 > 그렇게 하기위해서는 깃의 원리를 이해해야 한다.
          원격 저장소를 배우면 협업을 할 수 있게 됨
          공유한 이후에는 절대로 reset을 하면 안됨
          여러분의 컴퓨터에 있는 버젼에 대해서만 reset작업을 해야 함
          --hard는 위험 soft를 사용하길 권함

          또다른 방법
          git revert라는 방법이 있음
          커밋을 취소하면서 새로운 버젼을 생성하는 것
          어떤 방법으로 하든간에 커밋을 되돌릴 수 있다정도로만 아직 이해할 것
        • BANIP
          git reset (버전명) --hard --soft --mixed
          기재한 버전의 이름의 상태로 돌아감.
          추가 옵션에 따라 로그 자체가 날아갈수도 있고 역사를 되살리는 기록이 새로 추가되는 경우로 나뉨.
        • 이현수
          만화가 쉽게 설명되어 있네요 ㅎㅎ
        • groundntree
          reset 실습

          * 현재 로그 확인하여 버젼 id 확인하기
          git log

          * reset 하고 싶은 버젼id copy 하세요

          * reset
          git reset fb28d5148030104a16dd0f750e457a283e0d25a4 --hard

          HEAD is now at fb28d51 f2.txt first commit

          * 지정된 버젼으로 돌아갔는지 로그로 확인하세요.
          git log

          * f1.txt 의 내용이 리셋된 버젼의 내용인지 확인
          vim f1.txt
        • Philip Oh
          감사합니다:)
        버전 관리
        egoing
        현재 버전
        선택 버전
        graphittie 자세히 보기