git reset 명령어와 옵션을 알아보자.
git reset 명령어는 git 을 특정 commit 상태로 돌려놓는 명령어이다.
git reset 의 옵션을 알아보며 사용법에 대해 살펴보자.
$ 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 로 옮겨가는 것이다.
더 많은 내용은 http://git-scm.com/docs/git-reset 을 참고하면 된다.
출처 : http://littlehead.tistory.com/4
git rebase / git merge 차이점과 사용시기 (0) | 2012.12.01 |
---|---|
git rebase 명령어 중 유용한 옵션 option --onto (0) | 2012.11.30 |
git 의 branch 와 tag 그리고 head 의 이해 (3) | 2012.11.17 |
repo init / repo sync 에 사용되는 manifest.xml 파일에 대한 설명 (2) | 2012.11.16 |
android repository mirror 운영시 local branch 사용 (0) | 2012.11.15 |