2012-05-20 7 views
23

어떤 이유로 든 힘내는 내가 "커밋"되고 "커밋을 위해 준비되지 않은"파일을 가지고 있다고 말하고 있습니까?힘내 기는 동일한 파일을 수정하고 커밋을 위해 준비되지 않았습니까?

% git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# modified: Dir1/Dir2/filename.cpp 
# 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: Dir1/Dir2/filename.cpp 

Dir1, Dir2filename.cpp 확실히 모두 같은 파일은 다음과 같습니다이 이해가되지 않습니다. filename.cpp을 다시 추가하여 커밋 할 변경 사항 (원래 저장소에 있던)이 나타나도록해야했습니다. 문제를 일으킬 수있는 유일한 정보는 내가 은닉 한 것인데, pull --rebase, 그 다음에 stash이 튀었습니까? .gitignoreDir1, Dir2 또는 filename.cpp을 어디에도 나열하지 않으며 패턴은이 파일을 잡을 것이라고 제안하지 않습니까?

+0

정확히 무엇이 문제입니까? – svick

+1

을 추가 한 후에 수정 한 것처럼 보이면 다시 추가해 주시면됩니다. – thenetimp

+1

[기본 사항] (http : // git-scm.co.kr/book/ko/Getting-Started-Git-Basics # The-Three-States)를 사용하십시오. – kostix

답변

4

파일을 수정하여 추가하고 파일을 재구성하면이 동작이 발생합니다. 자식 추가 작업을 수행하면 해당 지점까지 변경 사항이 추가되고 다시 추가하지 않고 커밋하면 추가 된 첫 번째 변경 사항 집합 만 커밋됩니다.

$ git status 
# On branch master 
nothing to commit (working directory clean) 

matthewfarwell (master) 
$ vi foo.txt <-- add lines 1,2,3 here 

matthewfarwell (master) 
$ git add foo.txt 

matthewfarwell (master) 
$ git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: foo.txt 
# 

matthewfarwell (master) 
$ vi foo.txt <-- add lines 4,5,6, here 

matthewfarwell (master) 
$ git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: foo.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: foo.txt 
# 

그래서 지금 커밋하면 1,2,3 행만 커밋됩니다.

28

filename.cpp으로 변경하고 그 변경 사항을 git add과 함께 추가 한 다음 아직 변경하지 않은 변경 사항을 추가했음을 의미합니다.

"커밋 될 커밋"부분은 힘내네이트가 인덱스를 변경하여 업데이트했다는 것을 의미합니다. git commit을 실행하면 인덱스에 대한 변경 사항이 새 커밋 개체를 만드는 데 사용됩니다.

"변경되지 않음"부분에는 색인과 작업 복사본의 차이가 나와 있습니다.

당신은 당신과 같이보고있는 것을 재현 할 수 있습니다 :

  • 편집 filename.cpp
  • 실행 git status. '변경되지 않은 변경 사항'이 표시됩니다.
  • 실행 git add filename.cpp
  • 실행 git status. "커밋 할 변경 사항"이 표시됩니다.
  • filename.cpp를 다시 편집하십시오.
  • git status을 실행하십시오. "변경되지 않은 변경 사항"과 "커밋 될 변경 사항"이 모두 표시됩니다.

의미가 있습니까? Git이 어떻게 동작하는지 설명하는 것은 항상 약간 까다 롭습니다.

+1

참고 : 파일을 한 번만 커밋 그룹에 추가 할 수 있습니다. 추가 한 후 다시 변경하는 경우. 이러한 변경 사항은 커밋에 포함되지 않습니다. 커밋의 모든 새로운 변경 사항을 포함하려면 커밋 된 복사본을 최신 상태로 가져 오려면 "git reset -file-"다음에 "git add -file-"을 사용해야합니다. – ppostma1

+0

'git add file.java'를 실행하고'git status'를 실행합니다 바로 그 다음에 "변경되지 않은 변경 사항"과 "커밋 될 변경 사항"모두에 파일이 여전히 표시됩니다. 매우 혼동스러운 경우 – Jose

10

CVS, SVN, BZR 및 의심의 여지로 12 개의 다른 도구에서 한 번 파일이 추가되면 다음 커밋에 포함됩니다.

GIT가 아닙니다.

git에서는 "파일 추가"를하지 않고 "변경 사항 추가"(때로는 "단계 변경"이라고 함)를 사용합니다.

파일을 두 번 변경하면 두 번 추가해야합니다.

+0

맞습니다. 난 그냥 파일이나 심지어는 일부 (들) (그것은 청크라고도 함)에서 단지 한 줄을 할 수 있다고 덧붙일 것입니다. 그것은 매우 유용한 기능입니다. 예를 들어, 같은 파일에서 더 많은 (논리적으로 관련성이없는) 변경 사항을 작성한 경우이를 별도의 커밋으로 분할하려는 경우와 같이 매우 자주 사용하고 있습니다. –

관련 문제