상세 컨텐츠

본문 제목

git reset 명령어와 옵션

IT : GIT

by 휀스 2013. 1. 12. 02:00

본문



git reset 명령어와 옵션


git reset 명령어의 사용법에 대해 알아보겠습니다.


git reset 명령어는 git 을 특정 commit 상태로 돌려놓는 명령어입니다.


$ git reset -q aCommit pathA pathB pathC


aCommit 의 상태로 나열된 모든 path의 git 을 돌려놓는 것입니다.


-q : Error 가 있을 경우에만 로그를 보여줍니다.


$ git reset -q --hard aCommit


reset 을 할 경우 기존의 수정사항이 있을때 적용하는 옵션입니다.


--hard : 수정사항을 모두 무시하고 aCommit 상태로 돌려놓습니다.

--soft : 수정사항을 모두 유지하고 commit 하기 전의 상태로 남겨둔채 단지 HEAD 만 aCommit 으로 옮깁니다.



실제 사용되는 상황을 예로 설명해 보겠습니다.


1. file1.c file2.c 를 수정한다.

2. $ git add file1.c file2.c

3. repository 의 내용을 merge 해야하는 경우가 발생.

4. $ git reset

5. $ git pull git://xxxx.xxxx.xxx


이 경우 git reset 을 하게되면 file1.c file2.c 의 수정내용이 그대로 유지되며 git add 만 undo 하게 됩니다.


1. $ git commit xxxx

2. $ git reset --soft HEAD^

3. edit files

4. $ git commit -a -c ORIG_HEAD


이 상황은 일반적으로 많이 발생하는 상황입니다.

1 에서 commit 을 하였으나 수정이 잘못 되었을 경우 2 번의 명령으로 commit 과 git add 를 취소합니다. (바로 이전의 commit 상태로 돌림) --soft 옵션을 사용하였으므로 수정내용은 모두 남아있습니다.

그리고 3 에서 잘못된 내용을 다시 고치고 4 의 git commit -a -c ORIG_HEAD 명령으로 commit 을 합니다.

-c 옵션은 기존 commit 에서 사용한 comment 를 그대로 사용한다는 옵션입니다.

수정하고 싶을 경우는 --amend 를 사용하면 됩니다.


1 $ git branch aBranch

2 $ git reset --hard HEAD~3

3 $ git checkout aBranch


특정 branch 에서 작업하다가 현재 작업 내용이 해당 branch 에 적당하지 않을 경우 수정내용을 다른 aBranch 로 옮기는 방법입니다. 1 에서 aBranch 를 만들고 2 에서 작업내용을 redo 한 후 3 에서 aBranch 로 옮겨가는 것입니다. 1 에서 branch 를 만들고 checkout 하지 않았으므로 2의 작업은 master 의 내용을 삭제하게 됩니다.


더 많은 내용은 http://git-scm.com/docs/git-reset 을 참고하면 됩니다.


관련글 더보기