왜 'git commit'이 변경 사항을 저장하지 않습니까?


251

나는 git commit -m "message"이렇게했다 :

> git commit -m "save arezzo files"
# On branch master
# 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:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

그러나 나중에 내가 할 때 git status동일한 수정 된 파일이 표시됩니다.

> git status
# On branch master
# 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:   arezzo.txt
#       modified:   arezzo.jsp
#
no changes added to commit (use "git add" and/or "git commit -a")

내가 뭘 잘못하고 있죠?


16
git commit -am "save arezzo files"모든 변경 사항을 자동으로 추가하는 데 사용 합니다 (wrt .gitignore). 특정 파일 / 디렉토리 만 추가 할 수 있습니다.git add file.src
mbx

답변:


400

메시지가 말했듯이 :

커밋에 추가 된 변경 사항 없음 ( "git add"및 / 또는 "git commit -a"사용)

Git에는 커밋하기 전에 파일을 추가해야하는 "스테이징 영역" 이 있으며 여기에서 이에 대한 설명을 읽을 수 있습니다 .


구체적인 예를 들면 다음을 사용할 수 있습니다.

git commit -am "save arezzo files"

( a플래그 의 여분 을 참고하십시오. git commit -a -m "message"둘 다 같은 것을 할 수 있습니다)

또는 커밋에 추가 한 내용을 더 선택하려면 git add 명령을 사용 하여 준비 영역에 적절한 파일을 추가하고 git status 를 사용하여 추가 할 내용을 미리 봅니다 (주의를 기울여야 함). 사용 된 문구).

git documentation 페이지 에서 git 을 사용하는 방법에 대한 일반적인 문서와 자습서를 찾을 수 있으며 파일 준비 / 추가 개념에 대한 자세한 내용이 제공됩니다.


알아 두어야 할 또 다른 사항은 대화식 준비입니다 . 이렇게하면 파일의 일부를 준비 영역 에 추가 할 수 있습니다 . 따라서 관련성 있지만 다른 기능에 대해 세 가지 고유 한 코드를 변경 한 경우 대화식 모드를 사용하여 각 부분을 차례로 변경하고 추가 / 커밋합니다. 이와 같이 작은 특정 커밋이 있으면 도움이 될 수 있습니다.


@PeterBoughton은 "상호 작용 추가"대신 "상호 작용 추가"를 의미 했습니까?
djb

3
아냐, 나는 대화식 추가를 의미했다.
피터 Boughton

2
로컬 리포지토리는 코드를 원격 리포지토리로 푸시하기 전에 일종의 준비 영역입니다. 변경 사항을 커밋하기 전에 또 다른 "계층"을 추가해야하는 이유는 약간 복잡하지 않습니까? 나는 git을 처음 사용하지만 99,99 % 개발자는 항상 commit-am을 사용한다고 생각합니다. 변경 사항은 어쨌든 로컬 환경을 벗어나지 않기 때문입니다.
PawelRoman

2
IDE에 익숙해 져 있기 때문에 방금 이것에 부딪쳤다 고 생각합니다. 왜 그것이 필요한 단계인지 확실하지 않지만, 다시 한번, 나는 git에 대해 많은 것을 얻지 못했습니다 ... 나는 git을 의미합니다 ...
trpt4him

49

변경 사항을 추가하지 않았습니다. 구체적으로 통해

git add filename1 filename2

또는 모든 변경 사항을 추가하십시오 (프로젝트의 루트 경로에서)

git add .

-a커밋하는 동안 속기 를 사용하십시오 .

git commit -a -m "message".

또한 사용자가 대화 형 추가 기능을 사용하도록 강력히 권장합니다. 특히 쉽게 뒤집을 수있는 멋진 작은 커밋을 만들려고 할 때 특히 그렇습니다.
jer

40

해야 할 일 :

git commit . -m "save arezzo files"

4
이것은 OP의 질문에 대한 정답 인 것 같습니다. 그는 "추가"하기를 원하지 않았으며 수정 된 것을 커밋하기를 원했습니다.
VectorVortec

8

Git 소스 제어하에 있던 작은 하위 프로젝트를 다른 프로젝트에 복사하고 .git 폴더를 삭제하는 것을 잊었습니다. 커밋하려고 할 때 위와 같은 메시지가 표시되어 .git폴더를 삭제할 때까지 메시지를 지울 수 없었습니다 .

약간 바보이지만 커밋하지 않는 폴더 아래에 .git 폴더가 없는지 확인하는 것이 좋습니다.


7

당신은 할 수 있었다 :

git add -u -n

수정하고 추가 할 파일을 확인하려면 (dry run : -n 옵션)

git add -u

수정 된 파일 만 추가하려면


4

나는이 일을 한 경우에 나타나는이 문제 찾을 git add .하위 디렉토리에 다음 내 위치를 .gitignore파일의 삶 (내 저장소의 홈 디렉토리는 말하자면를). 귀하의로 변경 디렉토리를 시도 디렉토리 및 실행 git add .다음에 git commit -m "my commit message".


4

아마도 명백한 일이지만 ...

색인에 문제가 있으면 git-gui를 사용하십시오 . 인덱스 (스테이징 영역)가 실제로 어떻게 작동하는지 매우 잘 볼 수 있습니다.

색인을 이해하는 데 도움이 된 또 다른 정보 출처는 Scott Chacons의 "Getting Git"페이지 259입니다.

대부분의 문서 만 보여 주었으므로 명령 줄을 사용하여 시작했습니다 ...

git-gui와 gitk는 실제로 더 빠르게 작업 할 수 있다고 생각합니다. 예를 들어 "git pull"과 같은 나쁜 습관을 제거했습니다. 이제는 항상 먼저 가져옵니다 ... 병합하기 전에 새로운 변경 사항이 무엇인지 확인하십시오.


3

이런 일이 발생하는 이유는 Git에 의해 추적되는 다른 폴더 안에 Git에 의해 이미 추적되고있는 폴더가 있기 때문입니다. 예를 들어, 프로젝트가 있었고 하위 폴더를 추가했습니다. 둘 다 Git이 추적하기 전에 하나를 다른쪽에 넣었습니다. 내부 추적을 중지하려면 다음을 사용하여 Git 파일을 찾아 제거하십시오.

rm -rf .git

제 경우에는 WordPress 응용 프로그램이 있었고 내부에 추가 한 폴더는 테마였습니다. 따라서 테마 루트로 이동하여 Git 파일을 제거해야 전체 프로젝트가 이제 상위 WordPress 응용 프로그램에 의해 추적됩니다.


1

내 경우에 더 많은 파일이 있으면 프로젝트의 경로 폴더에서 파일 을 추가하려고 할 때 7000 개의 이미지 파일 이 있지만 추가되지는 않았지만 이미지 폴더로 이동하면 모든 것이 정상입니다. 대상 폴더를 통해 이동하고 abows와 같은 명령

git add .
git commit -am "image uploading"
git push origin master

git push origin master 객체 열거 : 6574, 완료. 개체 수 : 100 % (6574/6574) 완료 최대 4 개의 스레드를 사용한 델타 압축 객체 압축 : 100 % (6347/6347) 완료. 필기구 : 28 % (1850/6569), 142.17 MiB | 414.00 KiB / s


0

commit --amend발행 후에도 문제가 발생 git add .했지만 여전히 작동하지 않습니다. 일부 .vimrc사용자 정의를 수행했으며 편집기가 올바르게 작동하지 않는 것으로 나타났습니다. vim올바른 코드 를 반환 하도록 이러한 오류를 수정 하면 문제가 해결되었습니다.


0

동일한 오류 메시지와 비슷한 문제가 발생했습니다. "커밋을 위해 변경되지 않은 변경 사항"이지만 diff를 수행하면 차이점이 표시됩니다. 나는 마침내 디렉토리 케이스를 변경했다는 것을 마침내 알아 냈습니다. 전의. "PostgeSQL"을 "postgresql"로 내가 지금 기억하고 있듯이 git은 오래된 케이스 디렉토리에 파일을 두 개 남겨 둡니다. 그런 다음 새 사례에 새 버전을 커밋합니다.

따라서 git은 어느 것을 신뢰할지 모릅니다. 그래서 그것을 해결하기 위해 github의 웹 사이트로 이동해야했습니다. 그런 다음 두 경우를 모두 볼 수 있습니다. 또한 대소 문자가 잘못된 디렉토리의 모든 파일을 삭제해야합니다. 올바른 버전이 저장되었거나 올바른 디렉토리에 있는지 확인하십시오.

이전 사례 디렉토리에서 모든 파일을 삭제하면 해당 전체 디렉토리가 사라집니다. 그런 다음 커밋을 수행하십시오.

이 시점에서 로컬 컴퓨터에서 끌어 오기를 수행하고 더 이상 충돌을 볼 수 없습니다. 따라서 다시 커밋 할 수 있습니다. :)


0

다른 git-Repository에서 복제 된 하위 폴더가있는 경우 먼저 child-Repository에서 $ .git $ 파일을 제거해야합니다. 그 rm -rf .git 후에 상위 폴더로 변경하고을 사용할 수 있습니다 git add -A.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.