반응형

(github)깃허브 - 깃(git) 사용법2 깃 작업 되돌리기

 

이전 포스팅에서는 깃의 시작과 버전을 만드는 방법에 대해서 설명했습니다.이번 포스팅에서는 깃 하는 작업을 되돌리는 방법에 대해서 포스팅하겠습니다.

 

수정한 파일 되돌리기 git restore <파일명>

현재 폴더 상태와 git status 상태입니다.

git_test.txt와 git_test2.txt 파일이 커밋까지 완료된 상태입니다.

 

이제 git_test.txt파일을 열고 3열에 "CCC"를 지우고 "DDD"를 입력하고 저장합니다.

CCC 값을 삭제
DDD 값을 입력 저장

 

git status를 다시 입력합니다. 파일이 수정되었고, 커밋을 위한 스테이지에 올라가 있지 않은 상태임을 알려줍니다.

또한 git restore <파일명> 명령어를 입력하면 작업폴더 안에서의 변화를 취소(복구) 한다는 안내도 출력됩니다. (git 구버전에서는 git checkout으로 나올것 입니다. 최신버전에서는 git restore 입니다)

 

git restore git_test.txt 명령어를 입력하고 git status를 입력합니다.

git_test.txt의 파일은 최종커밋한 파일로 복원이 되고, 작업트리는 깨끗한 상태입니다.

 

이제 폴더에서 git_test.txt 파일을 실행하여 원복이 됐는지 확인을 합니다.

"DDD"로 수정했던 3열이 "CCC"로 다시 원복된 것을 확인 할 수 있습니다.

 

스테이지에 올라간 파일 되돌리기 git restore --staged <파일명>

위에서는 파일의 수정 상태를 원복했습니다.이번에는 스테이지 올라간 파일을 취소하는 방법입니다.이번에도 git_test.txt  파일을 열고 3열에 "CCC"를 "DDD"로 수정 및 저장합니다.

DDD 값을 입력 저장

 

git status 명령어 입력 후, git add git_test.txt 입력 후, git status 명령어를 다시 입력해 봅니다.

첫 git status에서는 파일이 수정된 것이 출력됩니다. git add 이후에 git status에서는 커밋을 위한 준비가 됐음을 출력합니다.(스테이지에 올라간 상태)

또한 git restore --staged <파일명> 으로 스테이지에서 내려오는 방법 또한 출력합니다.

(이전 버전에서는 git reset HEAD <파일명> 이었습니다)

 

git restore --staged git_test.txt 명령어를 입력합니다. 그리고 git status 명령어를 입력해서 unstage가 된 상태를 확인합니다.

 

최신 커밋삭제하며 이전으로 되돌리기  git reset HEAD^^

이번에는 커밋까지 이뤄진 최신 커밋을 취소하는 방법입니다.

현제 폴더에 있는 git_test.txt 파일의 3열은 "DDD"인 상태이고 스테이징도, 커밋도 안된 상태입니다.

(지금 현재 최종 커밋되어있는 깃의 git_test.txt 파일 3열은 "CCC" 입니다.)

 

이제 "DDD"로 변경한 내용을 add 및 commit 해줍니다.

두명령어를 한번에 해주는 명령어인 git commit -am "메세지내용" 을 입력합니다.

그리고 git status를 입력해서 깨끗한 작업트리 상태를 확인합니다.

 

git log를 입력해서 최종버전에 HEAD가 있는것을 확인합니다.

 

이제 git reset HEAD^^ 명령어를 입력합니다.

(원래 명령어는 git reset HEAD^ 꺽쇠가 한개이지만 cmd는 꺾쇠를 이스케이프 문자로 인식하여 두개를 입력함)

커밋이 취소되고, 언스테이지 되었다는 내용이 출력됩니다.

 

git log를 입력해보면 최신 커밋 버전의 log가 사라지고 이전 버전에 HEAD가 있는것이 확인됩니다.

 

git status를 입력하면 파일만 수정된 상태고 스테이지에도 올라가지 않은 상태임을 확인 할 수 있습니다.

 

이제 위에서 설명드렸던 git restore git_test.txt 명령어를 파일 원복을 실행 시키고 git status로 작업트리의 깨끗한 상태를 확인합니다.

 

이제 폴더의 git_test.txt 파일을 열어보면 3열이 "CCC"로 원복된것을 확인할 수 있습니다.

 

커밋을 되돌리는 여러가지 방법

※ 윈도우 cmd에서는 꺽쇠를 두번 ^^ 입력해줘야 합니다

최근 n개의 커밋을 취소하는 명령어 

$ git reset HEAD~n

 

최근 커밋을 하기 전 상태로 작업 트리를 되돌리는 명령어

$ git reset --soft HEAD^

 

최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌리는 명령어 (옵션 없이 사용할 경우와 같음)

$ git reset --mixed HEAD^
$ git reset HEAD^

 

최근 커밋과 스테이징을, 파일 수정까지 모두 전 상태로  작업 트리를 되돌리는 명령어 (파일이 이전 커밋으로 원복되며 복구 불가능)

$ git reset --hard HEAD^

 

특정 커밋으로 돌아가기

$ git log (commit 뒤에 커밋해시값을 얻기 위한 명령어)
$ git reset --hard <되돌아가고 싶은 커밋해시값>

 

최신버전 커밋 삭제 하지 않고 이전버전으로 되돌아가기 git revert

위에서 설명한 git reset과는 다르게 git revert 명령어는 최신버전의 커밋 내용을 삭제하지 않고 이전으로 버전으로 되돌아갈 수 있습니다.

 

먼저 git_test.txt 파일의 3열을 다시 "DDD"로 수정하고 저장합니다.

DDD 값을 입력 저장

 

git commit -am "메세지내용" 명령어를 입력하여 커밋을 하고 git log로 로그를 확인합니다.

 

위 사진에서 주황글씨로 commit 뒤에 나오는 값이 커밋해시 값 입니다.

git revert <HEAD가 있는 커밋해시값> 을 명령어로 입력합니다.

(git reset은 돌아가고 싶은 커밋해시값을 적지만, git revert는 취소할 커밋해시값을 입력)

 

vim이 열리고 리버트가 되기전에 추가로 남겨둘 메세지를 입력 할 수 있습니다. (i키 누르면 입력모드로 전환)

(vim 저장하고닫기: esc -> :wq)

 

이제 git log를 입력해 봅니다. 

그러면 로그에는 최신버전에서 revert한 새로운 커밋이 생성됩니다.

기존의 최신이었던 버전(DDD로 또 수정) 커밋도 여전히 존해합니다.

이는 최신버전의 커밋을 지우는 것이 아닌, 최신버전의 커밋을 취소한 새커밋을 만든 것 입니다.

 

이제 폴더에서 git_test.txt 파일을 열어봅니다.

그러면 3열의 "DDD"가 "CCC"로 복원된 것을 확인 할 수 있습니다.

 

[github]깃허브 전체보기

 

'(github)깃허브' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

 

반응형