연습 - Git을 사용하여 오류 수정

완료됨

이제 실수를 수정하는 방법을 실습해 봅시다.

삭제된 파일을 복구하는 연습

  1. 먼저 index.html을 삭제합니다.

    rm index.html
    

    잘못된 아이디어처럼 보일 수도 있지만 Git이 지원하고 있습니다.

  2. ls 명령을 사용하여 index.html이 삭제되었는지 확인합니다.

    ls
    
  3. 다음 출력이 표시되어야 합니다. 이제 index.html 파일이 없습니다.

    CSS
    
  4. index.html을 복구해 봅시다. git checkout을 사용하여 index.html을 복구합니다.

    git checkout -- index.html
    
  5. ls를 다시 사용하여 현재 디렉터리의 콘텐츠를 확인합니다. index.html이 복원되었나요?

    예! 이제 출력에 index.html 파일과 CSS 디렉터리가 표시됩니다.

    CSS  index.html
    

삭제된 파일을 복구하는 연습: git rm

삭제된 파일을 복구하려는 경우 rm 대신 git rm을 사용하여 삭제하면 약간 더 복잡해집니다.

  1. 어떻게 되는지 확인하려면 다음 명령을 실행합니다.

    git rm index.html
    
  2. 다시 ls를 실행하여 index.html을 찾습니다. index.html이 표시되지 않습니다.

  3. 지난번에 수행한 방법으로 index.html을 복구해 봅니다.

    git checkout -- index.html
    
  4. 이번에는 Git이 index.html에 대한 정보가 없다는 경고를 표시합니다. Git이 파일을 삭제했을 뿐만 아니라 인덱스에 삭제를 기록했기 때문입니다.

    error: pathspec 'index.html' did not match any file(s) known to git.
    
  5. git reset 명령을 사용하여 index.html 삭제를 스테이징 취소합니다.

    git reset HEAD index.html
    
  6. 다음 출력을 검사하여 확인합니다.

    Unstaged changes after reset:
    D       index.html
    
  7. 이제 이전과 동일한 명령을 사용하여 인덱스에서 파일을 복구할 수 있습니다.

    git checkout -- index.html
    

    git reset은 변경을 스테이징 취소했지만 그래도 파일이 삭제되었으므로 checkout을 사용하여 복구해야 합니다.

  8. ls를 실행하여 명령이 작동했는지 다시 확인합니다.

커밋 되돌리기

이제 더 복잡한 상황을 가정해 봅시다. 실수로 파일을 다른 파일로 덮어썼거나 파일을 변경했는데 알고 보니 중대한 실수였다고 가정합니다. 이전 버전의 파일로 되돌리려고 하지만 변경 내용을 이미 커밋했습니다. 이 경우 간단하게 git checkout만 사용해서는 문제를 해결할 수 없습니다.

이 문제에 대한 한 가지 해결 방법은 이전 커밋을 되돌리는 것입니다.

  1. code를 사용하여 index.html을 엽니다.

    code index.html
    
  2. index.html의 내용을 다음 코드로 바꿉니다.

    <h1>That was a mistake!</h1>
    
  3. 파일을 저장하고 닫습니다.

  4. 다음 명령을 사용하여 변경 내용을 커밋하고 최신 커밋을 표시합니다.

    git commit -m "Purposely overwrite the contents of index.html" index.html
    git log -n1
    

    여기서 -n1 플래그는 가장 최근 커밋 항목만 필요하다고 Git에 알립니다.

  5. 다음 명령을 사용하여 index.html 복원을 시도합니다.

    git checkout -- index.html
    
  6. 편집기에서 index.html을 엽니다.

    code index.html
    

    index.html의 어떤 버전이 표시되나요? 이전 버전인가요, 아니면 새 버전인가요?

    이 경우 가장 좋은 방법은 첫 번째 커밋을 취소하는 또 다른 커밋을 수행하여 변경을 되돌리는 것입니다. 바로 git revert 작업입니다.

  7. 파일을 닫고 git revert를 사용하여 커밋된 변경 내용을 실행 취소합니다.

    git revert --no-edit HEAD
    

    --no-edit 플래그는 이 작업에 관한 커밋 메시지를 추가하지 않도록 Git에 알립니다.

  8. 출력을 확인합니다. 다음 예제와 유사하게 표시됩니다.

    [main 6a27310] Revert "Purposely overwrite the contents of index.html"
    1 file changed, 13 insertions(+), 1 deletion(-)
    
  9. git log 명령을 추가하여 최신 커밋을 표시합니다.

    git log -n1
    
  10. 다시 출력을 확인합니다. 다음 예제와 같이 표시됩니다.

    Author: User Name <user-name@contoso.com>
    Date:   Tue Nov 19 23:42:26 2019 +0000
    
    Revert "Purposely overwrite the contents of index.html"
    
    This reverts commit 15d3bded388470c98881a632025bc15190fe9d17.
    
  11. 마지막으로 index.html 파일을 열어 내용이 올바른 버전인지 확인합니다.

되돌리기가 이 상황을 해결하는 유일한 방법은 아니며 index.html을 편집하고 수정된 파일을 커밋해도 됩니다. 커밋된 변경 내용이 광범위한 경우에는 해당 옵션이 더 어렵습니다. 어떤 경우에든 git revert는 의도를 알리기에 좋은 방법입니다.