리얼라이져의 마케팅, 개발, 창업 블로그

git 공부 (5)탄 본문

IT/문서관리

git 공부 (5)탄

nadadhl 2020. 4. 6. 16:22
728x90

git 공부 (1)탄 에서는  git 소프트웨어 설치에 대해서   정리했다.

git 공부 (2)탄 에서는  git에 대해서  간략하게  정리해보았다.

git  공부 (3)탄 에서는 git 저장소 만들기를  정리했다.

git  공부 (4)탄 에서는 파일을  만들어  commit 까지 해보는 과정을  간단히  해보았다.

 

 

이번에는  git 파일을   각  단계(스테이지,  저장소,  작업트리)에서 

수정전 사항으로  돌아가는 방법을  정리해 보도록 하겠다.

 

 

 

이전  git  공부 (4)탄 에서   다뤄 본 바에 따르면,  문서 버전 관리는 

다음과 같은 순서로  진행된다. 

 

작업트리 에서  파일  수정    ->     스테이지에  수정한 파일 올리기    ->     스테이지에 있는 대기 파일  저장소(repository)로  commit 

 

 

이중에서  맨처음 단계인  작업트리에서 파일 수정 후  다시 되돌려보는 방법을

먼저 알아 보겟다.

 

 

1. 스테이징 전  작업 트리에서  수정 파일 되돌리기 

 

우선  git status 를  쳐보니 스테이지에 commit 할께 없고 

작업트리도  수정 사항 없이  깨긋한 상태이다.

 

그리고 cat 명령어를 사용해서  hello.txt 의 내용을 보니,

'첫번째 hello.txt 파일입니다.'라는 내용이  들어있다. 

 

 

그럼  이제  작업 트리에서  위  hello.txt를   수정해보겠다.

필자는  vim 을 사용하여  수정했다. 

 

수정한 내용은  '두번째  수정 한 hello.txt 파일입니다'  이다. 

이 상태로  git status 를  보면,  아래와 같이 나온다. 

changes not staged for commit ->  수정된  파일이 아직  스테이지로 안올라감을  의미한다.

그리고 git  공부 (4)탄 에서는  modified 부분이  untracked로 나왔었는데,

지금 modified로 바뀐것을 볼수있다.

 

이미 git  공부 (4)탄에서  해당 hello.txt파일을  버전 관리를  한적이 있기 때문에, 

더이상  untracked가 아닌 tracked 파일이 된것이다.

 

 

그래서  tracked 파일의 경우  작업트리에서 수정하면,  modifed(수정된)으로 뜨게 된다.

 

 

 

그렇다면  여기서   다시  수정전으로  돌리려면  어떻게 할까??

 

git checkout '파일 이름' 을 써주면된다. 

위 명령어를  적용해보겠다.

적용하니,  

git status에서  작업트리는  다시  깨끗해 졌음이 보인다.  

그리고  cat 명령어로 다시 hello.txt 내용을  확인해보니, 수정전   내용 으로  다시 돌아 간것을 볼수 있다.

 

 

 

 

 

 

2. 스테이지 까지 올린  파일  다시 되돌리기.

 

다시  hello.txt 파일을    vim 에디터로   수정했다.  

수정한 내용은  두번째 hello.txt 파일입니다. 이다. 

 

 

git add 명령어를 사용해서  hello.txt 를 스테이지 영역으로  보냈다. 

git satus를  보면,  changes to be committed ->  스테이지로 넘어가  commit 대기중인  상태임을   

볼수 있다. 

 

이제  스테이징된  상태를  되돌려 보겠다.

'git reset HEAD 파일이름'을  넣게 되면, 다시   수정후  작업트리에만 있던 상태로 돌아갈수 있다.

 

git  status 를  다시 확인해보니, hello.txt 파일의  상태가 changes not staged for commit으로 

상태가 바뀐것을 확인 할수 있다.

 

그리고  cat 명령어로  hello.txt를 보았을때  수정 후 내용인것으로 보아,

'git reset HEAD 파일이름'은   스테이징  바로  전  단계로만 돌아갔음을 알수 있다. 

 

 

3. commit한  파일  다시 되돌리기.

 

다시  작업트리로  돌아왔기 때문에,  git commit -am "두번째 수정" 명령어를 통해  

스테이징  부터  커밋까지  한번에  하겠다. 

<git  commit -am '메세지' -> git add 와  git commit을  동시에 할수 있는 명령어>

git  commit -am '메세지'를 한뒤,   git status 를 보면. 

nothing to commit,  working tree clean 커밋할께  더이상  없다는 것이 보인다. 

 

git log 글  보면  '두번째  수정'이란 메세지의   commit이  보이게 된다. 

 

 

이제부터는 최신버전 commit을   다시  되돌리는 방법을  알아보겠다. 

 

명령어는  아래와 같이 있다. 

<최신 버전의  commit을 되돌리는 법이다.> 

1. git reset --Soft HEAD^   =>  스테이징까지 되돌려지지 않고  commit 전까지만  되돌려짐

 

2. git reset --mixed HEAD^ =>  git reset HEAD^ 했을때  

                                          똑같이  기본 옵셥으로 작용됨 ->  커밋 되돌리기스테이징  되돌 리기가 가능함.

 

3. git reset --hard HEAD^ =>  스테이징  커밋 되돌리기 뿐만 아니라, 작업트리  수정까지  되돌림

 

 

나는  git reset --mixed HEAD^를 이용해서  커밋과  스테이징  모두  되돌려 보겠다.

< git reset --mixed HEAD^는  디폴트여서  git reset HEAD^로 써도  똑같이 작용한다. >

< 최근  커밋이 아닌  특정 커밋으로 돌아갈때는  git reset --mixed 'commit 해쉬값'을  붙여 주면 된다. >

commit  해쉬값은  git log 명령어 입력시  각  버전 commit 옆  해쉬값들이다.  

 

한번  특정  commit으로 돌아가는 것을  진행해보겠다.

 

git log를  보면,  두번째 수정 버전 까지   commit이 된것을 볼수 있다.

이제  git reset --hard 뒤에   첫번쨰 커밋  버전  commit 해쉬 값을 넣어줬다.

이렇게 되면  해당 commit 버전이 최신 버전이 되고  그 이상  commit 들은  삭제된다.

 

거기에다  --hard를  사용했으니  수정된  작업 트리까지  다시 원래대로  바뀐 것을 볼수 있다. 

3. git reset --hard HEAD^ =>  스테이징  커밋 되돌리기 뿐만 아니라, 작업트리  수정까지  되돌림

 

 

git  reset 은 위에서  실행한것과 같이  최소  해당되는 commit을  삭제하고 진행된다. 

하지만, 해당 commit을  삭제하지않고  보류하고 다시  돌아가고 싶을때도 있다.

이렇때는  git  revert를 사용하면 된다. 

 

 

우선, 다시 hello.txt를  수정한다음에  두번째 수정 파일이라는 메세지로 commit을 하였다.

이제  git revert 로  '두번째 수정 파일' 이  삭제 되지 않고,    '첫번째  수정 파일입니다.'으로 

돌아오는걸  실행해보겠다.

git  revert 뒤에  ->  보류시킬  commit의  commit 해쉬값을  입력하면,

위와 같이  Revert "보류시킬  commit 메세지" 라는  문구와 함께

해당  commit이 삭제되지 않고  그전 commit으로 돌아가진걸 볼수 있다.

 

<주의 할점은 reset에서는  돌아가려는 commit의 해쉬값이 었다면,  revert는  보류시킬  commit의  해쉬값을  적어 주어야 한다. -  어디로 돌아가겠다가 아니라  이걸  되돌린다! 이다.>

 

 

cat hello.txt를  해보면,   첫번째  커밋  내용으로  돌아간것이 확인된다!! 

 

 

끝~

 

 

<git관련  공부 내용은   -Do it - 깃&깃허브 입문 책을  기반으로  공부하여  작성하였습니다.>

개발자가 되기 위해  공부 중인  비전공자  학생입니다. 
아직 부족하여,  부족하거나  틀린 내용이 있을수 있으니, 
그부분에 대해서  생각을  댓글로 공유해주시면 

감사하겠습니다.^^

'IT > 문서관리' 카테고리의 다른 글

GitEmoji 사용하기  (0) 2023.09.10
git 공부 (4)탄  (0) 2020.02.09
git 공부 (3)탄  (0) 2020.02.01
git 공부 (2)탄  (0) 2020.01.30
git 공부 (1)탄  (0) 2020.01.01
Comments