나는 Git을 사용하고 있으며 사용하는 파일이 거의 없다.
git commit -a
나중에 파일이 커밋에 실수로 추가 된 것을 발견했습니다.
마지막 커밋에서 파일을 어떻게 제거합니까?
답변
실수로 커밋 된 파일을 변경 사항을 취소하지 않고 이전 커밋에서 스테이징 영역으로 다시 이동시키는 문제이기 때문에 여기에 다른 답변이 잘못되었다고 생각합니다. 이것은 Paritosh Singh이 제안한 것처럼 수행 할 수 있습니다.
git reset --soft HEAD^
또는
git reset --soft HEAD~1
그런 다음 원하지 않는 파일을 재설정하여 커밋에서 제외하십시오.
git reset HEAD path/to/unwanted_file
이제 다시 커밋하면 동일한 커밋 메시지를 다시 사용할 수도 있습니다.
git commit -c ORIG_HEAD
답변
주의 ! 이전 커밋에서 파일을 제거하고 디스크에 보관하려면 위 의 juzzlin의 답변을 읽으 십시오 .
이것이 마지막 커밋이고 로컬 및 원격 저장소에서 파일 을 완전히 삭제 하려는 경우 다음을 수행 할 수 있습니다.
- 파일을 제거
git rm <file>
- 수정 플래그로 커밋 :
git commit --amend
amend 플래그는 git에게 다시 커밋하도록 지시하지만 마지막 커밋과 함께이 커밋을 “병합”합니다 (두 가지를 병합한다는 의미는 아님).
주석에서 언급했듯이 git rm
여기서 사용하는 것은 rm
명령 자체를 사용하는 것과 같습니다 !
답변
기존 답변은 마지막 커밋 에서 원하지 않는 파일을 제거하는 것에 관한 것 입니다.
오래된 파일에서 원하지 않는 파일을 제거하려면 커밋 (푸시조차도) 새 커밋을 생성하지 않으려는 경우 작업으로 인해 필요하지 않습니다.
1.
파일이 준수 할 커밋을 찾으십시오.
git checkout <commit_id> <path_to_file>
많은 파일을 제거하려는 경우이 작업을 여러 번 수행 할 수 있습니다.
2.
git commit -am "remove unwanted files"
삼.
파일이 잘못 추가 된 커밋의 commit_id를 찾으십시오. 여기에서 “35c23c2″라고하겠습니다.
git rebase 35c23c2~1 -i // notice: "~1" is necessary
이 명령은 설정에 따라 편집기를 엽니 다. 기본 설정은 vim입니다.
“원치 않는 파일 제거”마지막 커밋을 잘못된 커밋의 다음 줄 (이 경우 “35c23c2”)로 이동하고 명령을 fixup
다음 과 같이 설정하십시오 .
pick 35c23c2 the first commit
fixup 0d78b28 remove unwanted files
파일을 저장 한 후에는 양호해야합니다.
끝내기 위해 :
git push -f
불행히도 충돌이 발생하면 수동으로 해결해야합니다.
답변
수락 된 답변에서 알 수 있듯이 전체 커밋을 재설정하여이 작업을 수행 할 수 있습니다. 그러나 이것은 다소 무거운 접근 방식입니다.
더 확실한 방법은 커밋을 유지하고 변경된 파일을 간단히 제거하는 것입니다.
git reset HEAD^ -- path/to/file
git commit --amend --no-edit
는 git reset
그 이전 있다는 파일을 커밋 인덱스에 무대됩니다. 작업 디렉토리의 파일은 변경되지 않습니다.
그러면 git commit
인덱스가 커밋되고 현재 커밋으로 스쿼시됩니다.
기본적으로 이전 커밋에 있던 파일 버전을 가져 와서 현재 커밋에 추가합니다. 결과적으로 순 변경이 없으므로 파일이 커밋에서 효과적으로 제거됩니다.
답변
서버에서 변경 사항을 푸시하지 않은 경우 사용할 수 있습니다
git reset --soft HEAD~1
모든 변경 사항을 재설정하고 하나의 커밋으로 되돌립니다.
변경 사항을 적용한 경우 @CharlesB의 답변에 따라 단계를 수행하십시오.
답변
rm을 사용하여 파일을 제거하면 파일이 삭제됩니다!
항상 제거하지 않고 git에서 커밋을 추가하고 있으므로이 경우 파일을 첫 번째 커밋 이전 상태로 되돌립니다 (파일이 새로운 경우 ‘rm’삭제 작업 일 수 있음). 다시 커밋하면 파일이 이동합니다.
파일을 이전 상태로 되돌리려면
git checkout <commit_id> <path_to_file>
또는 원격 HEAD의 상태로 되돌리려면 :
git checkout origin/master <path_to_file>
그런 다음 커밋을 수정하면 파일이 목록에서 사라지고 디스크에서 삭제되지 않았 음을 알 수 있습니다.
답변
git checkout HEAD~ path/to/file
git commit --amend