Study Programming/Git

Git 파일 다루기6 - 되돌리기(Undo)/이전 커밋 덮어쓰기, Staged->Unstaged, Modified->Unmodified

네모메모 2021. 7. 6. 21:22
반응형

 


 

Git은 커밋하지 않고 잃어버린 것은 절대로 되돌릴 수 없다.

 


Git 되돌리기(Undo) : (재커밋, Staged->Unstaged, Modified->Unmodified)

      - ※ 매우 주의 ※ : 한 번 되돌리면 복구할 수 없기에 주의해야 한다.

                              Git을 사용하면 우리가 저지른 실수는 대부분 복구할 수 있지만 되돌린 것은 복구할 수 없다.

 


 

CASE1) 커밋 후 바로 재커밋하기 : $ git commit -amend

  ㄴ> 방금 커밋한 사항에 대해 바로 수정작업이 필요할 때,

         수정작업을 하고 Staging Area에 추가 후 $ git commit --amend 명령을 사용하면 재커밋된다.

 

  ㄴ> 마지막으로 커밋하고 나서 수정한 것이 없다면(=커밋하자마자 바로 이 명령을 실행하는 경우)

         이전에 한 커밋과 모든 것이 같고, 커밋 메시지만 수정된다.

 

  ㄴ> ※ 이전의 커밋은 일어나지 않은 일이 되는 것이고 당연히 히스토리에도 남지 않는다.


  ㄴ> 위 명령어 실행시켜 편집기가 실행되면 이전 커밋 메시지가 자동으로 포함되며,
         이 메시지를 수정하지 않고 그대로 커밋해도 기존의 커밋을 덮어쓴다.


  ㄴ> ex) 커밋을 했는데 Stage 하는 것을 누락한 경우 아래와 같이 고칠 수 있다.

         $ git commit -m 'initial commit'
         
         $ git add forgotten_file
         $ git commit --amend

 




CASE2) Staged 파일 되돌리기 : $ git reset HEAD <파일>

  ㄴ> 파일 상태를 Unstage로 변경하기 (=Staging Area에서 파일 빼기->Working directory로 돌려보내기)

 

  ㄴ> 'HEAD' : 현재 브랜치를 가리키는 포인터           

  ㄴ> ※ git reset 명령의 일부 옵션은 Working directory의 파일까지 수정되므로 위험하다! (--hard 옵션과 함께 사용하면 더더욱 위험)
          하지만 옵션 없이 사용하면 워킹 디렉토리의 파일은 건드리지 않는다.

  ㄴ> [추가적인 $ git reset 명령어 사용법]

 

  ㄴ> ex) 따로따로 커밋하려고 했지만, 실수로 git add * 라고 실행한 경우 아래와 같이 고칠 수 있다.

      ① 실수해버린 파일 상태 확인

      $ git status
      On branch master
      Changes to be committed:
        (use "git reset HEAD <file>..." to unstage)

         renamed:    README.md -> README
         modified:   CONTRIBUTING.md

 

      ㄴ> git이 친절히 "Changes to be commited 밑에 git reset HEAD <file>…  "로 알려준다.

 

 

        ②  추가하지 않으려 했던 CONTRIBUTING.md 파일을 Stagine Area에서 빼기

   $ git reset HEAD CONTRIBUTING.md
   Unstaged changes after reset:
   M   CONTRIBUTING.md


   $ git status
   On branch master
   Changes to be committed:
     (use "git reset HEAD <file>..." to unstage)

      renamed:    README.md -> README

   Changes not staged for commit:
     (use "git add <file>..." to update what will be committed)
     (use "git checkout -- <file>..." to discard changes in working directory)

      modified:   CONTRIBUTING.md

   

   


 

CASE3) Modified 파일 되돌리기 : $ git checkout -- <파일>

  ㄴ> Modified상태 파일을 최근 커밋한 상태(또는 clone했을 때 상태)로 되돌리기

  ㄴ> ※ 주의 : 수정한 내용은 전부 사라지므로 위험하다. 
          +) [권장] 변경한 내용을 쉽게 버릴수는 없고 하지만 당장은 되돌려야만 하는 상황이라면 Stash와 Branch를 사용

 

  ㄴ> Ex▼) 수정한 CONTRIBUTING.md파일(Unstaged상태)을 수정 전으로 되돌리기

		$ git status
		On branch master
		Changes to be committed:
		  (use "git reset HEAD <file>..." to unstage)

			renamed:    README.md -> README

		Changes not staged for commit:
		  (use "git add <file>..." to update what will be committed)
		  (use "git checkout -- <file>..." to discard changes in working directory)

			modified:   CONTRIBUTING.md


		$ git checkout -- CONTRIBUTING.md


		$ git status
		On branch master
		Changes to be committed:
		(use "git reset HEAD <file>..." to unstage)

		 renamed:    README.md -> README

    

 

 

 


 

END!


스터디 도움 참조 블로그 (References)

- 버전 관리(VC) 위키백과
https://ko.wikipedia.org/wiki/%EB%B2%84%EC%A0%84_%EA%B4%80%EB%A6%AC

- 누구나 쉽게 이해할 수 있는 Git 입문
https://backlog.com/git-tutorial/kr/

/입문편/Git의 기본/이력을 관리하는 저장소
https://backlog.com/git-tutorial/kr/intro/intro1_2.html

- git--distributed-even-if-your-workflow-isnt (Pro Git Book)
https://git-scm.com/book/en/v2

- git--distributed-even-if-your-workflow-isnt (Pro Git Book) / ch2.4
https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EB%90%98%EB%8F%8C%EB%A6%AC%EA%B8%B0



 

 

 

 

반응형