git 사용 상세 설명 (4) -- 첫 체험

임시 저장 되 지 않 은 업데이트 보기
실제 git status 의 표 시 는 비교적 간단 합 니 다. (수 정 된, 새로 만 든, 임시 저장 되 었 으 나 제출 되 지 않 은) 파일 만 보 여 주 었 을 뿐 구체 적 으로 어디 를 수 정 했 는 지 확인 하려 면 git diff 명령 을 사용 할 수 있 습 니 다.잠시 후에 우 리 는 상세 하 게 소개 할 것 입 니 다 git diff. 그러나 지금 은 우리 의 두 가지 질문 에 대답 할 수 있 습 니 다. 현재 하고 있 는 어떤 업데이트 가 아직 임시 저장 되 지 않 았 습 니까?어떤 업데이트 가 잠시 저장 되 어 다음 에 제출 할 준비 가 되 어 있 습 니까?git diff 파일 패 치 형식 으로 구체 적 으로 추가 하고 삭제 한 줄 을 표시 합 니 다.
README 파일 을 다시 수정 한 후 잠시 저장 한 다음 Benchmarks. rb 파일 을 편집 한 후 잠시 저장 하지 않 고 실행 status 명령 을 실행 하면 다음 을 볼 수 있 습 니 다.
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   README
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#	modified:   benchmarks.rb
#

임시 저장 되 지 않 은 파일 이 어떤 부분 을 업 데 이 트 했 는 지 확인 하려 면 파 라 메 터 를 추가 하지 않 고 직접 입력 하 십시오 git diff.
$ git diff diff --git a/benchmarks.rb b/benchmarks.rb
index 3cb747f..da65585 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -36,6 +36,10 @@ def main
           @commit.parents[0].parents[0].parents[0]
         end

+        run_code(x, 'commits 1') do
+          git.commits.size
+        end
+
         run_code(x, 'commits 2') do
           log = git.commits('master', 15)
           log.size

이 명령 은 작업 디 렉 터 리 에 있 는 현재 파일 과 임시 저장 영역 스냅 샷 간 의 차 이 를 비교 합 니 다. 즉, 수정 후 임시 저장 되 지 않 은 변화 내용 입 니 다.
임시 저 장 된 파일 과 지난번 에 제출 한 스냅 샷 사이 의 차 이 를 보 려 면 git diff --cached 명령 을 사용 할 수 있 습 니 다.(Git 1.6.1 및 더 높 은 버 전 git diff --staged 을 사용 할 수 있 습 니 다. 효 과 는 같 지만 더 잘 기억 합 니 다.) 실제 효 과 를 살 펴 보 세 요.
$ git diff --cached
diff --git a/README b/README
new file mode 100644
index 0000000..03902a1
--- /dev/null
+++ b/README2
@@ -0,0 +1,5 @@
+grit
+ by Tom Preston-Werner, Chris Wanstrath
+ http://github.com/mojombo/grit
+
+Grit is a Ruby library for extracting information from a Git repository

단지 git diff 는 아직 잠 정적 으로 저장 되 지 않 은 변경 사항 을 표시 하 는 것 일 뿐, 이번 작업 과 지난번 제출 사이 의 차이 가 아니 라 는 것 을 주의 하 십시오.그래서 가끔 은 업 데 이 트 된 모든 파일 을 한꺼번에 저장 한 후에 실행 git diff 한 후에 아무것도 없 는 이유 가 있 습 니 다.
앞서 말 한 바 와 같이 Benchmarks. rb 를 잠시 저장 한 후에 편집 하고 실행 git status 하면 임시 저장 전후의 두 가지 버 전 을 볼 수 있 습 니 다.
$ git add benchmarks.rb
$ echo '# test line' >> benchmarks.rb
$ git status
# On branch master
#
# Changes to be committed:
#
#	modified:   benchmarks.rb
#
# Changed but not updated:
#
#	modified:   benchmarks.rb
#

현재 실행 git diff 은 임시 저장 전후의 변 화 를 봅 니 다.
$ git diff
diff --git a/benchmarks.rb b/benchmarks.rb
index e445e28..86b2f7c 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -127,3 +127,4 @@ end
 main()
 
 ##pp Grit::GitRuby.cache_client.stats
+# test line

그리고 git diff --cached 로 잠 정적 으로 저 장 된 변 화 를 확인 합 니 다.
$ git diff --cached
diff --git a/benchmarks.rb b/benchmarks.rb
index 3cb747f..e445e28 100644
--- a/benchmarks.rb
+++ b/benchmarks.rb
@@ -36,6 +36,10 @@ def main
          @commit.parents[0].parents[0].parents[0]
        end

+        run_code(x, 'commits 1') do
+          git.commits.size
+        end
+
        run_code(x, 'commits 2') do
          log = git.commits('master', 15)
          log.size

업데이트 제출
현재 의 임시 저장 구역 은 이미 준비 가 다 되 었 으 니 제출 할 수 있다.그 전에 수정 되 었 거나 새로 만 든 파일 이 아직 git add 있 는 지 확인 하 십시오. 그렇지 않 으 면 제출 할 때 아직 저장 되 지 않 은 변 화 를 기록 하지 않 습 니 다.그래서 매번 제출 을 준비 하기 전에 git status 으로 임시 저장 되 어 있 는 지 확인 한 다음 에 제출 명령 git commit 을 실행 합 니 다.
$ git commit

이 방식 은 제출 한 설명 을 입력 하기 위해 텍스트 편집 기 를 시작 합 니 다.(기본적으로 셸 의 환경 변수 $EDITOR 가 지정 한 소프트웨어 를 사용 합 니 다. 일반적으로 vim 이나 emacs 입 니 다. 물론 제1장 에서 소개 하 는 방식 으로 git config --global core.editor 명령 을 사용 하여 원 하 는 편집 소프트웨어 를 설정 할 수도 있 습 니 다.)
편집 기 는 다음 과 같은 텍스트 정 보 를 표시 합 니 다 (이 예 는 Vim 의 화면 표시 방식 으로 보 여 줍 니 다).
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   README
#       modified:   benchmarks.rb
~
~
~
".git/COMMIT_EDITMSG" 10L, 283C

기본 제출 메 시 지 는 마지막 실행 git status 의 출력 을 포함 하고 주석 줄 에 놓 습 니 다. 또한 시작 부분 에 빈 줄 이 있 습 니 다. 제출 설명 을 입력 할 수 있 습 니 다.당신 은 이 주석 줄 들 을 완전히 없 앨 수 있 지만, 남 겨 두 어도 괜 찮 습 니 다. 다소 이번 업데이트 내용 이 어떤 것 이 있 는 지 기억 해 줄 수 있 습 니 다.(만약 이것 이 부족 하 다 고 생각한다 면 -v 옵션 을 사용 하여 차 이 를 수정 하 는 줄 마다 주석 에 포함 시 킬 수 있 습 니 다.) 편집 기 를 종료 할 때 Git 은 설명 줄 을 버 리 고 설명 내용 과 이번 업 데 이 트 를 창고 에 제출 합 니 다.
또한 - m 매개 변 수 를 사용 하여 설명 을 제출 하 는 방식 으로 한 줄 의 명령 에 업 데 이 트 를 제출 할 수 있 습 니 다.
$ git commit -m "Story 182: Fix benchmarks for speed" [master]: created 463dc4f: "Fix benchmarks for speed"
 2 files changed, 3 insertions(+), 0 deletions(-)
 create mode 100644 README

자, 이제 첫 번 째 제출 을 만 들 었 습 니 다!보 실 수 있 습 니 다. 제출 하면 현재 어느 지점 (master) 에서 제출 되 었 는 지, 이번 제출 의 전체 SHA - 1 검사 와 무엇 463dc4f, 그리고 이번 제출 에서 몇 개의 파일 이 수정 되 었 는 지, 몇 줄 이 추가 되 었 는 지, 삭제 되 었 는 지 알려 드 립 니 다.
제출 할 때 기록 한 것 은 임시 저장 영역 에 놓 인 스냅 샷 입 니 다. 아직 저장 되 지 않 은 것 은 수 정 된 상 태 를 유지 하고 다음 제출 시 버 전 관리 에 포함 시 킬 수 있 습 니 다.제출 작업 을 실행 할 때마다 프로젝트 에 대한 스냅 샷 을 찍 습 니 다. 나중에 이 상태 로 돌아 가 거나 비교 할 수 있 습 니 다.
임시 저장 영역 건 너 뛰 기
임시 저장 구역 을 사용 하 는 방식 은 제출 할 세부 사항 을 세 심하게 준비 할 수 있 지만, 때로는 이렇게 하 는 것 이 약간 번거롭다.Git 은 임시 저장 영역 을 건 너 뛰 는 방식 을 제공 합 니 다. 제출 할 때 git commit-a 옵션 을 추가 하면 Git 은 추적 한 모든 파일 을 자동 으로 저장 해서 제출 합 니 다. git add 절 차 를 건 너 뜁 니 다.
$ git status
# On branch master
#
# Changed but not updated:
#
#	modified:   benchmarks.rb
#
$ git commit -a -m 'added new benchmarks' [master 83e38c7] added new benchmarks
 1 files changed, 5 insertions(+), 0 deletions(-)

보이 시 나 요?제출 하기 전에 git add 파일 benchmarks. rb 가 필요 하지 않 습 니 다.
파일 제거
Git 에서 파일 을 삭제 하려 면 추적 한 파일 목록 에서 삭제 하고 제출 해 야 합 니 다.git rm 명령 으로 이 작업 을 완료 하고 작업 디 렉 터 리 에서 지정 한 파일 을 삭제 할 수 있 습 니 다. 그러면 나중에 추적 되 지 않 은 파일 목록 에 나타 나 지 않 습 니 다.
작업 디 렉 터 리 에서 파일 을 간단하게 삭제 하면 실행 git status 시 "Changed but not updated"부분 (즉 임시 저장 되 지 않 은 목록) 에서 볼 수 있 습 니 다.
$ rm grit.gemspec $ git status
# On branch master
#
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#
#       deleted:    grit.gemspec
#

그리고 git rm 를 실행 하여 이번 파일 제거 작업 을 기록 합 니 다.
$ git rm grit.gemspec
rm 'grit.gemspec'
$ git status
# On branch master
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    grit.gemspec
#

마지막 으로 제출 할 때 이 서 류 는 더 이상 버 전 관리 에 포함 되 지 않 는 다.이전에 수정 하고 임시 저장 영역 에 두 었 다 면 파일 을 잘못 삭제 한 후 수 정 된 내용 을 잃 어 버 리 지 않도록 강제 삭제 옵션 -f 을 사용 해 야 합 니 다.
또 다른 경 우 는 Git 창고 에서 파일 을 삭제 하고 싶 지만 현재 작업 디 렉 터 리 에 저장 하고 싶 습 니 다.추적 목록 에서 만 삭제 한 다 는 얘 기다.예 를 들 어 일부 대형 로그 파일 이나 .a 컴 파일 파일 파일 을 실수 로 창고 에 넣 은 후에 추적 을 제거 하지만 파일 을 삭제 하지 않 고 나중에 .gitignore 파일 에 보충 할 수 있 도록 --cached 옵션 을 사용 하면 됩 니 다.
$ git rm --cached readme.txt

뒤에 파일 이나 디 렉 터 리 의 이름 을 표시 할 수도 있 고 glob 모드 를 사용 할 수도 있 습 니 다.예 를 들 면:
$ git rm log/\*.log

별표 * 이전의 역 슬 래 쉬 \ 를 알 수 있 습 니 다. Git 은 파일 모드 확장 매 칭 방식 이 있 기 때문에 셸 이 도와 주지 않 아 도 됩 니 다.(번역: 실제 적 으로 역 슬 래 쉬 를 추가 하지 않 아 도 실행 할 수 있 습 니 다. 셸 확장 에 따라 지정 한 디 렉 터 리 에 있 는 파일 만 삭제 하고 재 귀적 으로 일치 하지 않 습 니 다. 위의 예 는 디 렉 터 리 를 지정 하기 때문에 효 과 는 같 지만 아래 의 예 는 재 귀적 으로 일치 하기 때문에 반드시 역 슬 래 쉬 를 추가 해 야 합 니 다.) 이 명령 은 모든 것 을 삭제 합 니 다 log/디 렉 터 리 아래 확장자 .log 의 파일 입 니 다. 예 를 들 어:
$ git rm \*~

현재 디 렉 터 리 와 하위 디 렉 터 리 의 모든 ~ 끝 에 있 는 파일 을 재 귀적 으로 삭제 합 니 다.
파일 이동
다른 VCS 시스템 과 달리 Git 은 파일 이동 을 추적 하지 않 습 니 다. Git 에서 파일 이름 을 바 꾸 면 창고 에 저 장 된 메타 데 이 터 는 이름 을 바 꾸 는 동작 을 나타 내지 않 습 니 다. 하지만 Git 은 매우 똑똑 합 니 다. 어떤 일이 일 어 났 는 지, 어떻게 했 는 지 는 추 정 됩 니 다. 나중에 다시 이야기 하 겠 습 니 다.
그렇다면 Git 의 mv 명령 을 보면 곤 혹 스 러 울 것 입 니 다. Git 에서 파일 이름 을 바 꾸 려 면 다음 과 같이 하 십시오.
$ git mv file_from file_to

예상 한 대로 정상적으로 작 동 합 니 다. 실제로 상태 정 보 를 보 더 라 도 이름 바 꾸 기 동작 에 대한 설명 을 실수 없 이 볼 수 있 습 니 다.
$ git mv README.txt README
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    README.txt -> README
#

사실 실행 git mv 은 다음 세 가지 명령 을 실행 한 것 과 같다.
$ mv README.txt README
$ git rm README.txt
$ git add README

이렇게 분리 작업 을 하면 Git 도 이름 을 바 꾸 는 것 임 을 깨 닫 기 때문에 어떤 방식 으로 든 똑 같 습 니 다. 물론 직접 git mv 사용 하 는 것 이 훨씬 가 볍 습 니 다. 하지만 가끔 다른 도구 로 이름 을 바 꾸 면 제출 하기 전에 오래된 파일 이름 을 삭제 하고 새로운 파일 이름 을 추가 하 는 것 을 기억 하 세 요.

좋은 웹페이지 즐겨찾기