우리는 Git 으로 소스코드를 버전관리하면서 실수로 작성한 것을 되돌리거나 수정하길 원할 때가 있다.
이러한 일을 하기 위해서 Git 에서는 다양한 방법으로 이런 기능들을 제공한다.
이런 방법은 크게 commit 을 했는지 안했는지, commit 을 공개했는지, 안했는지에 따라 다르다.
1. commit 이 안된 실수를 수정하는 방법
방법은 간단하다. 아래의 명령어로 변경된 내용 혹은 git index 에 있는 내용을 비울 수 있다.
$ git reset --hard HEAD |
이해를 돕기 위해서 간단한 예제를 들어 보았다.
Kona:test starblood$ cat README.md # Git reset, checkout, revert introduction
README.md 파일에 간단한 내용을 추가 # Git reset, checkout, revert introduction
This is introduction of some basic commands that modifying history. |
변경된 내용을 확인하기 위해 git diff 명령어를 사용
Kona:test starblood$ git diff diff --git a/README.md b/README.md index 1443214..737d01e 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # Git reset, checkout, revert introduction + +This is introduction of some basic commands that modifying history. |
변경된 내용을 git index 에 반영하고 git diff 로 변경된 파일이 있는지 확인. (index 에 들어갔기때문에 없다.)
Kona:test starblood$ git add README.md Kona:test starblood$ git diff Kona:test starblood$ |
변경된 내용이 git index 에 들어갔는 지 확인
Kona:test starblood$ git diff --cached diff --git a/README.md b/README.md index 1443214..737d01e 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # Git reset, checkout, revert introduction + +This is introduction of some basic commands that modifying history. |
다시 약간의 내용을 추가하고 변경된 내역을 확인
Kona:test starblood$ cat README.md # Git reset, checkout, revert introduction
This is introduction of some basic commands that modifying history.
* git-reset - Reset current HEAD to the specified state
Kona:test starblood$ git diff
diff --git a/README.md b/README.md
index 737d01e..17f9bc8 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
# Git reset, checkout, revert introduction
This is introduction of some basic commands that modifying history.
+
+ * git-reset - Reset current HEAD to the specified state
|
git index 의 내용은 어떤 것인지 다시 확인
Kona:test starblood$ git diff --cached diff --git a/README.md b/README.md index 1443214..737d01e 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ # Git reset, checkout, revert introduction + +This is introduction of some basic commands that modifying history. |
git reset --hard HEAD 명령어가 어떤 일을 수행하는지 확인 해봄.
Kona:test starblood$ git reset --hard HEAD HEAD is now at c01d76f Initial commit Kona:test starblood$ git diff Kona:test starblood$ git diff --cached Kona:test starblood$ |
이와 같이 git reset --hard HEAD 명령어는 변경된 내용이 staged 된 내용 과 stage 되지 않은 내용 전부 되돌려놓는 일을 수행한다. stage 라는 것은 이전 포스팅에서도 언급했지만, git index 에 변경된 내용을 update 하는 과정을 일컫는다.
한 개의 파일만을 되돌리고 싶을 경우에는 git checkout 이라는 명령어를 사용하면 된다.
$ git checkout -- README.md $ git checkout HEAD README.md |
첫 번째 명령어는 README.md 파일을 index 에 기록되어 있는 상태로 되돌린다.
두 번째 명령어는 git reset --hard HEAD 와 같은 일을 수행하지만, 한 개의 파일만을 대상으로 한다는 것에 차이가 있다.
2. commit 이 된 실수를 수정하는 방법
크게 두가지 방법이 있다.
첫 번째는 실수한 commit 을 수정하여 다시 새로운 commit 을 만든느 것
두 번째는 실수한 commit 자체를 수정하는 방법.
두 번째 방법은 실수한 commit 이 이미 다른 사람들에게 공개를 했다면, 사용하지 말아야 한다.
실수를 수정하는 첫 번째 방법은 아래와 같다.
아래의 명령어는 실수한 commit 을 commit 하기 전의 상태로 돌려놓고 새로운 commit 을 만들도록 한다.
$ git revert HEAD |
예제:
Kona:test starblood$ git log commit c01d76f766b5d79c53e740530db5611dba5368e8 Author: Gyuhang Shim <plto001@gmail.com> Date: Fri Aug 5 11:04:48 2011 +0900
Initial commit |
새로운 내용을 추가 한다. (잘 못된 내용이 추가되었다.)
Kona:test starblood$ cat README.md # Git reset, checkout, revert introduction
akjdslkfjlasjdfklajsdfljslkdfjkl |
실수로 commit 한 것이 보인다. (Wrong commit)
Kona:test starblood$ git log commit 545f640838d5cd84f9f737f6e47619040c62626e Author: Gyuhang Shim <plto001@gmail.com> Date: Fri Aug 5 13:05:37 2011 +0900
Wrong commit
commit c01d76f766b5d79c53e740530db5611dba5368e8 Author: Gyuhang Shim <plto001@gmail.com> Date: Fri Aug 5 11:04:48 2011 +0900
Initial commit |
이 실수로 한 commit 에 해당하는 변경내역을 제거하고 이전의 commit 내용과 같은 내용으로 새로운 commit 을 만든다.
아래의 내용을 보면, 새로운 Wrong commit 이 추가되었음을 알 수 있다.
Kona:test starblood$ git revert HEAD [master 809e862] Revert "Wrong commit" 1 files changed, 0 insertions(+), 2 deletions(-) Kona:test starblood$ git log commit 809e862882a768897f51784e3713fb60f719ee4e Author: Gyuhang Shim <plto001@gmail.com> Date: Fri Aug 5 13:08:37 2011 +0900
Revert "Wrong commit"
This reverts commit 545f640838d5cd84f9f737f6e47619040c62626e.
commit 545f640838d5cd84f9f737f6e47619040c62626e Author: Gyuhang Shim <plto001@gmail.com> Date: Fri Aug 5 13:05:37 2011 +0900
Wrong commit
commit c01d76f766b5d79c53e740530db5611dba5368e8 Author: Gyuhang Shim <plto001@gmail.com> Date: Fri Aug 5 11:04:48 2011 +0900
Initial commit |
정말 잘못된 내용이 제거되었는지 확인해보자. 정말 asdf ... 이런 잘못된 내용이 제거되었다. :)
Kona:test starblood$ cat README.md # Git reset, checkout, revert introduction |
전전 상태로 돌리고 싶다면 아래와 같은 형태로 명령어를 입력할 수도 있다.
$ git revert HEAD^ |
commit 자체를 수정하여 실수를 수정하는 방법
git commit --amend 명령어를 사용하여 수정할 수 있다.
이 명령어는 현재의 git index 에 있는 내용을 기준으로 하여 마지막에 수행된 commit 을 수정하게 해주는데, 파일의 추가, commit 메시지 수정할 수 있도록 해준다.
또 다른 방법으로는 git rebase 가 있는데, 이것은 git merge 와 유사한 기능을 수행하도록 해주는 명령어인데, 이에 관련해서는 다음 branch 관련 글을 포스팅하면서 자세히 다루도록 할 예정이다. :)
'Programming > Git' 카테고리의 다른 글
gitolite admin 계정 변경 (0) | 2012.12.27 |
---|---|
Setting the default git branch in a bare repository (0) | 2012.01.10 |
9. github 계정설정 (0) | 2011.07.03 |
8. github 소개 (0) | 2011.07.03 |
7. Git 기본 지식 (0) | 2011.07.03 |