티스토리 뷰
2.4 Git Basics - 예전으로 되돌리기
예전으로 되돌리기
넌 Stage상태의 어떤 것들을 되돌리고 싶을때가 있을것이다. 여기서, 우리는 당신이 만든 변경사항을 되돌릴수 있는 기본적인 툴들에 대해서 알아볼것이다. 이를 행할때는 조심해야한다. 왜냐하면 당신이 되돌린 것들중 일부는 다시는 되돌릴 수 없기 때문이다. 이 부분이 Git에서 당신이 실수를 하면 데이터를 잃어버릴 수 있는 몇 안되는 영역 중 하나이다.
당신이 마지막으로 커밋트 한 변경사항을 변경하기
보통 내용을 되돌리는 실수 저지르는 것중에 하나로 커밋트할 몇개의 파일들을 빼먹고 커밋트한 경우 또는 커밋트 메세지를 잘못 썻을때이다. 만약에 당신이 커밋트를 다시하고 싶을때면 commit 명령어에 --amend옵션을 추가해서 실행하면된다:
$ git commit --amend
이것도 commit 메세지를 넣으라고 처음에 뜨는건 똑같지만, 이미 그곳에는 예전에 커밋트 할때 썼던 메세지가 존재한다는 점이 다르다. 당신이 이것을 새로 써도 되고 그냥 놔둬도 된다.
예를 들면, 당신이 커밋트를 하고 당신이 이번 커밋트에 추가하고 싶었던 변경사항을 stage하지 않았다는것을 알았다면, 당신은 다음과 같이 할수있다:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
이 세가지 명령어를 실행하면 당신은 마지막에 한 커밋트를 두번째하는 커밋트로 대체할 수 있다.
Stage 파일을 Unstage 파일로 되돌리기
다음 2 섹션은 당신의 staging 영역과 working 디렉토리 간의 변경사항에 대한 것들을 증명한 것들이다.당신이 그 두 영역의 상태를 결정하기 위해 사용하는 명령어는 역시 당신이 그것을 다시 어떻게 되돌릴 수 있다는 것을 상기시켜 준다는 것이 좋은 부분이다.예를 들어, 당신이 2개의 파일을 수정하고 그 변경사항을 2번에 나누어서 커밋트를 하려고 하는데 실수로 git add *를 실행하여 모두 다 stage화 시켰다고 해보다. 어떻게 당신은 2개중 하나만 unstage 시킬수 있는가? git status 를 실행하여 상태를 확인해 보자:
$ git add .
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.txt
# modified: benchmarks.rb
#
"Changes to be committed" text 오른쪽 아래에 git reset HEAD <file>... to unstage"라고 써있다. 그래서 benchmarks.rb파일을 그 어드바이스를 이용하여 unstage화 해보자:
$ git reset HEAD benchmarks.rb
benchmarks.rb: locally modified
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.txt
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: benchmarks.rb
#
명령어가 조금 이상하기 하지만 작동함을 알수 있다. benchmarks.rb 파일의 상태가 다시 한번 unstage로 변경했다.
변경된 파일을 원래대로 되돌리기
만약에 당신이 benchmarks.rb 파일의 변경사항들을 계속 유지하고 싶지 않다면? 어떻게 당신은 이것을 쉽게 예전으로 되돌릴수 있겠는가?(또는 클론을 처음으로 했던때로 또는 워킹 디렉토리에 있었던 때로)? 운좋게 git status 가 어떻게 해야하는지 알려준다. 마지막 예제 출력에서 그 unstaged 영역은 다음과 같다.:
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: benchmarks.rb
#
여기에 상당히 명시적으로 어떻게 하면 당신이 했던 변경사항을 삭제할 수 있는지 알려준다.(적어도, Git 1.6.1버젼 이후로 이것을 할수 있다. 만약 더 오래된 버젼이라면, 우리는 upgrade하기를 제안한다.) 한번 이대로 실행해보자:
$ git checkout -- benchmarks.rb
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.txt
#
변경사항이 원래대로 다시 돌아간것을 볼 수 있다. 당신은 이것이 위험한 명령어라는 것을 인식해야만 한다.: 그 파일에서 일어났던 그 어떤 변경사항도 다 사라질 것이다.이는 마치 다른 파일로 엎어치는 것과 같은 행동을 하는 것이다. 그래서 당신이 생각하기에 그 파일이 절대 필요없다는 것이 확신하기 전까지는 이 명령어를 사용하지 말아라. 만약 당신이 이 방법말고 다른 방법을 원한다면, 다음 챕터에서 살펴볼 stashing 또는 branching 을 참고하자. 이것들은 더 나은 방법이다.기억해라, Git에 커밋트된 모든것들은 거의 대부분은 언제나 복구할 수 있다. 여러 branch에서 삭제 또는 --amend 명령어를 사용해서 커밋트를 오버라이트 시킨 경우에라도 다시 복구할 수 있다.(see Chapter 9 for data recovery). 그러나, 커미트 하지 않고 잃어버린 것들은 다시는 볼 수 없을 것이다.
'이제 관심밖의 IT 기술 > Pro Git 번역' 카테고리의 다른 글
2.3 Git Basics - 커밋트 히스토리 확인하기 (0) | 2012.10.24 |
---|---|
2.2 Git Basics - 변경사항을 저장소에 저장하기 (0) | 2012.10.15 |
2.1 Git Basics - Git 저장소 가져오기 (0) | 2012.09.28 |
Chapter 2 (0) | 2012.09.27 |
1.7 시작하기 - 정리 (0) | 2012.09.26 |
- Total
- Today
- Yesterday
- BC주
- Canada
- 정착서비스
- Certificate
- 우드워킹
- git proGit
- 온타리오
- 밀튼
- TORONTO
- 캐나다
- 부동산분석
- Red Hat
- ansible
- BTBS
- 벌링턴
- redhat
- certification
- 옥빌
- RHEL
- 인터넷
- 미시사가
- 토론토정착서비스
- 부모님초청이민
- RHCE
- cert
- basement
- 캐나다부동산
- Jay
- docker
- 토론토
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |