본문 바로가기
Deep Learning/연구.개발 관련 지식들

Git의 기초. 이전 commit을 삭제 하는 방법. file_size_limit 처리방법

by Steve-Lee 2020. 4. 7.

Episde5: Large File을 Push하자 Error를 마주치게 되었다.

어김없는 Error Message! 반갑다...!

해석하자면

Git은 100.00MB파일까지 리모트 저장소에 저장이 가능해요

  • 문제를 해결하는 방법으로는 두 가지 방법이 존재한다.
    • 첫 째, gitignore File을 적용하는 방법
    • 둘 째, 이전 커밋을 삭제한 뒤 해당 파일을 지워주는 방법이 있다.

안되는 git을 계속해서 push해보는 삽질을 여러번... commit을 취소하기로 마음먹었다.

 

  • 오늘은 두 번째 방법인 커밋을 삭제하는 방법을 공유하고자 한다.
  • 첫 번째 방법인 gitignore은 다음번에 다루도록 하겠다. (이 방법이 더 좋을 것 같다는 생각을 한다.)

 

Solution

  • git log

  • 내가 되돌리고 싶은 commit은 최근에 수행했던 두 번의 commit이다.

  • 지금까지의 문제 요약

    앞선 두 번의 commit을 취소하세요

  • 목표

    • git commit을 취소하고 문제가 되는 파일을 삭제한 뒤 다시 add, commit, push를 하자

최종 확정본(commit)을 삭제한 뒤 다시 stage부터 하는거야!

참고한 블로그의 커버, 최종 확정본(commit)을 삭제한 뒤 다시 stage부터 하는거다!

Solution

git commit을 취소하는 방법으로는 reset 명령어를 사용하는 방법이 있다.

git에서 커밋을 잘못 했을 경우 이전 커밋으로 되돌리는 방법이다.

 

  • commit 취소 명령어의 다양한 특징
    • git reset HEAD^: 최종 커밋을 취소. 해당 파일들은 staged 상태로 working directory에 보
    • git reset —hard HEAD^: 최종 커밋을 취소. 파일 또한 복구를 한다.

즉, git reset HEAD^만 할 경우 modified 파일은 그대로 남아있다.(위 그림 참고)(working directory에 작업 내역이 그대로 존재한다)

 

정리하면

git reset —hard HEAD^의 경우 해당 파일들을 unstaged 상태로 working directory에서 삭제된다.

commit을 취소하고 해당 파일들을 unstaged 상태로 working directory에 보존하는 방법도 있다.

git reset —mixed HEAD^

  • 마지막 2번의 commit(최근에 수행한 2번의 commit)을 취소하기 위해서는 HEAD^ 대신에 HEAD~2 명령어를 사용한다
  • git reset HEAD~2

필자의 경우, 해당파일까지는 삭제하려 하지 않았기에 git reset HEAD~2 명령어로 해당 Issue를 해결하였다.

git reset HEAD~2

git reset HEAD^ 명령어 이후 git log를 통해 commit log를 확인해보면 앞선 두 번의 commit 기록이 삭제되었음을 확인할 수 있다.

Reference

[Git] git add 취소하기, git commit 취소하기, git push 취소하기 - Heee's Development Blog

git commit 취소 하는 간단한 reset 명령어 소개

Appendix

git에서 반드시 알아야 할 세 가지 상태

이 부분은 중요하기에 집중해서 읽기를 권장한다 —git document —
  • Git의 기본!!
  • Git은 파일을 committed, Modified, Staged 이렇게 세 가지 상태로 관리한다.
  • 각각에 대해 살펴보자
    • Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미한다.
    • Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것을 말한다.
    • Staged란 현재 수정 파일을 곧 커밋할 것이라고 표시한 상태를 의미한다
  • 이 세 가지 상태는 Git 프로젝트의 세 가지 단계와 연결돼 있다.
  • Git 디렉토리, 워킹 트리, Staging Area세 단계를 이해하고 넘어가자

공식문서에서도 중요하다고 강조를 했다.

Git의 세 가지 단계. Working Directory, Staging Area, Git directory

  • Git 디렉토리는 Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳을 말한다. 이 Git 디렉토리가 Git의 핵심이다. 다른 컴퓨터에 있는 저장소를 Clone할 때 Git 디렉토리가 만들어진다.
  • Working Directory는 프로젝트의 특정 버전을 Checkout한 것이다. Git 디렉토리는 지금 작업하는 디스크에 있고 그 디렉토리 안에 압축된 데이터베이스에서 파일을 가져와 워킹 트리를 만든다.
  • Staging Area는 Git 디렉토리에 있다. 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장한다. Git에서는 기술용어로 "Index"라고 하지만 "Staging Area"라는 용어를 써도 상관 없다.
  • Git으로 하는 프로세스는 다음과 같다
    1. Working Directory(워킹 트리)에서 파일을 수정한다.
    2. Staging Area에 파일을 Stage해서 커밋할 스냅샷을 만든다. 모든 파일을 추가할 수도 있고 선택하여 추가할 수도 있다.
    3. Staging Area에 있는 파일들을 Commit해서 Git 디렉토리에 영구적이 스냅샷으로 저장한다.
  • Git 디렉토리에 있는 파일들은 Committed상태이다.
  • 파일을 수정하고 Staging Area에 추가했다면 Staged이다.
  • Checkout 하고 수정은 했지만 아직 Staging Area에 추가하지 않았으면 Modified이다.

정리

아~ Modified는 Checkout은 했지만 아직 Staging Area에 추가되지 않은 상태이구나. 즉 git add를 하지 않으면 버전관리는 이루어지지 않고 파일만 수정된는 것이다!

우리가 흔히 아는 git add는 working directory의 작업 내용들이 추적되기 시작하는 것이구나. 즉Staging Area에 진입해서 커밋할 스냅샷을 남기게 되는거구나.

오늘도 이렇게 하나 배우고 간다.

Git - Git 기초

댓글