Git 커밋에서 파일 제거 commit -a 나중에 파일이 커밋에

나는 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의 답변을 읽으 십시오 .

이것이 마지막 커밋이고 로컬 및 원격 저장소에서 파일완전히 삭제 하려는 경우 다음을 수행 할 수 있습니다.

  1. 파일을 제거 git rm <file>
  2. 수정 플래그로 커밋 : 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