2014-02-25 2 views
1

git에 디렉토리를 추가하면 실수로 이미 추가하고 싶지 않은 임시 파일 (.~으로 끝남)이 있습니다.git 커밋 된 파일을 unstage 할 수 없습니다

*.~ 규칙을 사용하여 .gitignore 파일을 설정했습니다. 이 작업은 모든 새로운 임시 파일에서 가능하지만 이미 커밋 된 파일은 삭제할 수 없습니다.

git rm --cached <file>을 실행하면 파일이 modified:에서 deleted: 상태로 이동합니다. 그리고

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  deleted: FILE.~ 

을 말한다 그러나 우리는 git reset HEAD FILE.~을 실행할 때, 그것은

Unstaged changes after reset: 
M  pd/FILE.~ 
+0

무언가를 무대하지 않으려 고합니다. 당신은 파일 삭제를 준비하려고 시도하고 있습니다. –

답변

2

당신은 거의 다 아래의 파일 목록에 여전히 : 단계 이후를 중지하고 커밋!

git status의 메시지는 실수로 변경 한 경우 이미 변경 한 사항을 실행 취소하는 방법입니다. git rm --cached <file>을 실행할 때 올바른 결과를 얻었습니다.이 명령은 스테이징 영역에서 파일을 제거하면서 동시에 로컬 복사본에 남겨 둡니다. Git 상태는 파일의 상태가 잘못된 경우 수행해야 할 작업을 알려줌으로써 도움이됩니다. 이 경우 파일은 올바른 상태이므로 진행하고 커밋 할 수 있습니다.

+0

처음에 파일이 제거되었지만 임시 파일이 변경되었으며 이제는 수정 된 상태로 돌아갑니다. – KPK

+0

나는 그것이 무엇을 의미하는지 확신하지 못합니다. –

1

문제는 단계는 당신이이 Git Book 명확하게 파일 상태를 보여줍니다에서 File Lifecycle

위 이미지입니다 생각되지 않는 것입니다.

이미 커밋 한 임시 파일은 실제로 준비되지 않지만 추적됩니다. 힘내라 제거를 커밋 할 때 파일을 추적 중지합니다. git status에는 파일을 제거하는 커밋 할 변경 사항이 있습니다. git commmit -a -m "Removed temp files" 실제로 제거하고 파일을 untracked하게 커밋해야합니다.

그러나이 방법을 사용하면 매우 명확하게 설명되어있는 사람을 Github Help: Remove Sensitive Data에 연결하려는 이전 커밋의 파일은 제거되지 않습니다.

자식 필터 - 분기 --force --index 필터 \ \ --prune 비어 --tag 이름 필터 고양이 '자식 RM은 --ignore-UNMATCH을 --cached'- - 모두

위의 명령을 사용하면 필요하지 않은 기록에서 완전히 오래된 파일을 제거하지만 추가 정보로 포함됩니다.

관련 문제