ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Git 작업 되돌리기
    Git&GitHub/Git 사용방법 2022. 5. 18. 13:35
    728x90

    <작업트리에서 수정한 파일 되돌리기 - git checkout>

     

    파일을 수정한 뒤 소스가 정상적으로 동작하지 않는 등의 이유로 수정한 내용을 취소하고 가장 최신 버전 상태로 되돌려야 할 때가 있습니다.  이럴 때 일일이 수정한 소스를 찾아서 직접 돌리려면 번거로울 것입니다. 이럴 때 checkout 명령을 사용하면 작업트리에서 수정한 내용을 쉽게 취소할 수 있습니다. 실습을 통해 알아보도록 하죠

     

    1. 먼저 빔을 열고 숫자 '3' 을 영문 'three'로 수정한 후 저장합니다.

    $ cd hello

    $ vi hello.txt

     

     

    2. 현재 파일의 상태는 어떨까요? git status 명령을 사용해보세요. hello.txt가 수정되었지만 아직 스테이지에 올라가있지 않습니다.

     

     

    3.git checkout 명령다음에 --(두개)를 붙이고 한칸 띈다음 파일이름을 쓰면됩니다.

    $ git checkout -- hello.txt

     

    4. 정상적으로 처리되면 화면에는 아무것도 나타나지 않습니다. hello.txt 파일의 수정내용이 정말 사라졌는지 확인해봅시다.

    cat 명령어를 사용해 확인해보면 'three'가 사라지고 '3'이 남아있는 것을 볼 수 있습니다.

     

     

    <스테이징 되돌리기 - git reset HEAD 파일이름>

    앞에서는 파일의 수정을 취소하고 원래대로 되돌렸습니다. 이번에는 수정된 파일을 스테이징 했을 때, 스테이징을 취소하는 방법을 취소하는 방법을 알아보겠습니다. 여기서는 앞에 만든 hello2.txt 파일을 사용하겠습니다.

     

    1. 빔을 사용해서 hello2.txt를 수정해보겠습니다. 기존내용을 삭제하고 대문자 A B C D 를 입력한 후 저장하고 빔을 종료합니다.

    $ vi hello2.txt

     

     

    2. git add 명령으로 hello2.txt 파일을 스테이지에 올린 후 git status 명령으로 파일의 상태를 확인합니다

    $ git add hello2.txt

    $ git status

     

    3. 상태 메시지 중 괄호 안의 내용을 읽어봅시다. 스테이지에서 내리려면 git reset HEAD 명령을 사용하라고 되어 있습니다.

    (제건 안그렇습니다만..)

     

     

    4. 아무튼..  git reset 명령을 사용해 스테이지에서 hello2.txt를 내려보겠습니다.

    $ git reset HEAD hello2.txt

     

    5.수정된 hello2.txt가 스테이지에서 내려졌다는 (unstaged)메시지가 나타납니다.

     

     

    6.다시 git status를 이용해 파일의 상태르리 확인해보세요. 파일이 아직 스테이지에 올라가기 전으로 돌아온 것을 볼 수 있습니다.

     

     

    <최신 커밋 되돌리기 - git reset HEAD^>

    이번에는 수정된 파일을 스테이징하고 커밋까지 했을 때, 가장 마지막에 한 커밋을 취소하는 방법을 알아보겠습니다.

     

    1. 다시한번 hello2.txt 문서를 수정해보겠습니다. 빔을 열고 E를 끝에 추가한 후 저장한 후 닫습니다.

    $vi hello2.txt

     

     

    2. git commit 명령을 사용해 스테이징과 커밋을 함께 실행합니다. 커밋 메시지는 message 4로 하겠습니다

    $ git commit -am "message 4"

     

    3. git log 명령을 사용하면 커밋 메시지가 'message 4'인 커밋을 확인할 수 있습니다.

     

     

    4. 최신 커밋을 되돌리려면 git reset 명령 다음에 HEAD^를 붙입니다. HEAD^는 현재 HEAD가 가리키는 브랜치의 최신 커밋을 가리킵니다. git log 명령을 실행했을 때 가장 최신 커밋에 (HEAD->master)표시가 있던 것을 기억할 것 입니다. 이렇게 되돌리면 커밋도 취소되고 스테이지에서도 내려집니다. 취소한 파일이 작업 트리에만 남는 것이죠

     

    $ git reset HEAD^

     

    5.커밋이 취소되고 스테이지에서도 내려졌다는 메시지가 나타납니다.

     

     

    6. 정말로 커밋이 취소되었을까요? git log 명령으로 확인해보겠습니다. 메시지가 'message 4'인 커밋이 사라진 것을 볼 수 있습니다. 이 방법으로 커밋을 취소하면 이 커밋 전에 했던 스테이징도 함께 취소됩니다.

     

     

    ** git reset 명령의 옵션은 git 명령어 게시물에서 찾아보시길 바랍니다 **

     

     

    <특정 커밋으로 되돌리기 - git reset 커밋해시>

    깃에는 파일을 수정하고 커밋할 때마다 저장된 버전들이 쌓여있습니다. 그 중에서 특정 커밋으로 되돌릴 때는 git reset 명령 다음에 커밋해시를 사용합니다.

     

    1. git reset 명령을 연습해 보기 위해 몇개의 커밋을 만들어보겠습니다. 빔을 사용해서 hello 디렉터리에 rev.txt를 만듭니다. 간단하게 아무 글자나 넣고 저장하세요

    $ vi rev.txt

     

    2.rev.txt를 스테이지에 올린 후 'R1'메시지와 함께 커밋합니다

    $ git add rev.txt

    $ git commit -m "R1"

     

    3.rev.txt를 한번도 수정해서 아무 글자나 추가하고 'R2'메시지와 함께 커밋합니다.

    $ vi rev.txt

    $ git commit -am "R2"

     

     

    4. 같은 방법으로 rev.txt열고 글자추가하고 'R3' 커밋하고, 추가하고 'R4' 커밋합니다. 지금까지 4번의 커밋을 하였습니다.

     

    5. git log 명령을 사용해서 지금까지 만든 커밋을 확인해봅시다. 4개의 커밋이 있고 각 커밋마다 커밋해시가 함께 나타나 있습니다. 여기서는 각메시지의 이름을 따서 예를 들어 R4메시지의 커밋을 R4커밋이라고 부르는 식으로 하겠습니다.

    우리는 R2커밋을 최신 커밋으로 돌려보겠습니다.

     

     

    6. reset 커밋 해시를 사용해 되돌릴 때 주의할 점이 있습니다. 예를 들어 reset A를 입력한다면 이 명령은 A 커밋을 리셋하는 것이 아니라 최근 커밋을 A로 리셋합니다. 즉 A 커밋을 삭제하는 것이 아니라 A 커밋 이후에 만들었던 커밋을 삭제하고, A 커밋으로 이동하겠다는 의미입니다.

    R2 커밋으로 이동하기 위해 git log 명령의 결과 화면에서 R2 커밋의 커밋해시를 선택합니다. 마우스로 드래그하면됩니다.

    그리고 컨트롤 C를 눌러 복사합니다.

     

     

    7. git reset 명령 다음에 --hard 옵션까지 입력한 후 복사한 커밋 해시를 붙여넣습니다. 마우스 오른쪽 클릭을 하면 붙여넣어집니다. 그리고 enter를 누릅니다.

    $ git reset --hard 복사한 커밋해시

     

    8. HEAD가 방금 복사해서 붙인 커밋 해시 위치로 옮겨졌다고 나타나죠? 즉, 방금 복사해서 붙인 커밋이 가장 최신 커밋이 된 것입니다.

     

     

    9. git log 명령을 사용해서 로그 목록을 살펴보세요. 우리가 의도했던 대로 R4와 R3 메시지가 있던 커밋은 삭제되고

    커밋해시를 복사했던 커밋이 최신 커밋이 되었습니다.

     

     

    10. 하나 더 확인해 볼 것이 있습니다. R2로 되돌렸으니 rev.txt 는 어떻게 되었을까요? cat 명령을 사용하여 확인해보면 R2 메시지 당시의 글자까지만 있는 것을 확인 할 수 있습니다. 이렇게 R3와 R4가 사라지고 R2 커밋이 최신 커밋이 되었습니다

     

     

    <커밋 삭제하지 않고 되돌리기 - git revert>

    수정했던것을 삭제해도 된다면 git reset 명령을 사용하면 되지만, 나중에 사용할 것을 대비해서 커밋을 되돌리더라도 최소한 커밋을 남겨두어야 할 때가 있습니다. 이때는 git reset이 아닌 git revert라는 명령을 사용합니다.

     

    1. 앞의 내용을 따라왔다면 rev.txt라는 파일이 있을 것입니다. 커밋은 R2까지 만들어져 있을 것이고요.

    rev.txt 파일을 한번더 수정해서 영문자 'e'를 추가합니다.

    $ vi rev.txt

     

     

    2. 수정한 rev.txt를 'R5'라는 메시지와 함께 커밋하세요

    $ git commit -am 'R5'

     

    3. git log를 입력해 버전을 확인해 보세요 rev.txt파일에 대해 R1,R2,R5 3개의 버전이 만들어졌습니다.

     

     

    4. 가장 최근에 커밋한 R5 버전을 취소하고 R5직전 커밋 R2로 되돌아가려고 합니다. 앞에서 공부했던 reset의 경우에는 R2로 가기 위해서 reset 명령 뒤에 R2의 커밋 해시를 지정했지만, revert의 경우에는 revert뒤에 취소하려고 하는 버전, 즉 R5의 커밋해시를 지정합니다. 먼저 revert할 R5의 커밋 해시를 복사합니다.

     

     

    5. 로그화면이 너무 길다면 q를 눌러서 프롬프트($)를 표시합니다. 그리고 아래와 같이 입력하세요

    $ git revert 복사한 R5 커밋해시

     

    6. revert 명령을 실행할 때는 기본 편집기가 자동으로 나타나면서 커밋 메시지를 입력할 수 있습니다.

    커밋메시지 맨 위에는 어떤 버전을 revert 했는지 나타나 있습니다. 문서 맨 위에 revert하면서 추가로 남겨둘 내용이 있따면 입력하고 저장합니다.

     

     

    7. 'R5'버전이 revert되었따는 간단한 메시지가 나타나는데, 실제로 버전이 어떻게 바뀌었는지 확인해봅시다.

    $ git log

     

    8. 로그에 R5를 revert한 새로운 커밋이 생겼습니다. 그리고 기존의 R5 역시 사라지지 않았습니다. R5를 지우는 대신 R5에서 변경했던 이력을 취소한 채 새 커밋을 만든것입니다.

     

     

    9.방금 취소한 R5 커밋은 rev.txt 문서에 영문자 'e'를 추가한 것이었습니다. R5 커밋을 취소한 것이 문서에도 반영되었는지 확인해 보겠습니다. 다음과 같이 입력하세요

    $ cat rev.txt

     

    10. 앞에서 추가했던 'e'가 없어진 것을 볼 수 있습니다. 이렇게 revert 명령을 사용하면 버전에 있던 이력을 취소할 수 있습니다.

     

    728x90

    댓글

Designed by Tistory.