Git : 푸시 후 커밋 된 파일 제거


112

Git에서 커밋 된 파일을 되돌릴 수 있습니까? GitHub에 커밋을 푸시 한 후 푸시하고 싶지 않은 파일이 있다는 것을 깨달았습니다 (변경 사항을 완료하지 않았습니다).


1
푸시 후 GitHub에서 파일을 완전히 제거 하시겠습니까? 그렇지 않으면 git rm <file>, git push.
rdrmntn 2013-08-21


답변:


153

업데이트 : 더 안전한 방법 추가

선호하는 방법 :

  1. 파일의 이전 (변경되지 않은) 상태를 확인하십시오. 이중 대시를 주목하십시오

    git checkout HEAD^ -- /path/to/file
    
  2. 그것을 커밋하십시오 :

    git commit -am "revert changes on this file, not finished with it yet"
    
  3. 힘이 필요하지 않습니다.

    git push
    
  4. 완료되지 않은 작업으로 돌아가서 다시 수행하십시오 (위쪽 화살표 3 번).

    git checkout HEAD^ -- /path/to/file
    

효과적으로 '커밋 해제':

저장소 HEAD의 마지막 커밋을 수정하여 실수로 푸시 된 작업을 난독 화하면서 이미 해당 작업을 가져 왔을 수있는 동료와 충돌 할 가능성이 있으며, 회색 머리카락이 커지고 로컬 브랜치 헤드를 조정하는 데 많은 시간을 잃을 수 있습니다. 중앙에 :

마지막 커밋에서 파일 변경을 제거하려면 :

  1. 파일을 마지막 커밋 이전 상태로 되돌리려면 다음을 수행하십시오.

    git checkout HEAD^ /path/to/file
    
  2. 되 돌린 파일로 마지막 커밋을 업데이트하려면 다음을 수행하십시오.

    git commit --amend
    
  3. 업데이트 된 커밋을 저장소에 푸시하려면 다음을 수행하십시오.

    git push -f
    

정말로, 앞서 언급 한 선호하는 방법을 사용해보십시오.


1
프로젝트의 유일한 개발자가 아니라면 git push -f를 사용해서는 안됩니다. 그것은 가치보다 훨씬 더 많은 문제를 야기합니다. 파일을 제거한 다음 새 커밋을 수행하십시오.
richardm

1
@ user553086은 더 이상 동의 할 수 없습니다. 더 나은 지금?
xor

역사상 더 거슬러 올라가는 커밋으로 이것이 가능합니까? 예를 들어 이것을 할 수 git checkout HEAD~2 /path/to/file있습니까? 편집 : 내 경우에 원한 같은 외모는 간단했다git rm /path/to/file
starscream_disco_party

1
방금 4 시간을 구 했어요!
Tosin Onikute

56

원격 저장소에서 파일을 제거하려면 먼저 --cache 옵션을 사용하여 프로젝트에서 파일을 제거한 다음 푸시합니다.

git rm --cache /path/to/file
git commit -am "Remove file"
git push

(이것은 파일이 일부 커밋 전에 원격 저장소에 추가 된 경우에도 작동합니다.) 푸시하지 않으려는 파일 확장명을 .gitignore에 추가해야합니다.


2
이렇게하면이 커밋에서 파일이 제거되지만 파일은 이전 커밋 내에서 계속 볼 수 있습니다.

30

하나의 파일 만 지정된 개정으로 되돌릴 수 있습니다.

먼저 파일이 변경된 커밋을 확인할 수 있습니다.

git log path/to/file.txt

그런 다음 개정 번호로 파일을 체크 아웃 할 수 있습니다.

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt

그 후에 커밋하고 다시 푸시 할 수 있습니다.


7

파일을 올바른 상태로 재설정하고 커밋 한 다음 다시 푸시하십시오.

다른 사람이 아직 변경 사항을 가져 오지 않았다고 확신하는 --amend경우 커밋 할 때 사용 하여 이전 커밋을 수정 (예 : 기록 다시 쓰기) 한 다음 푸시 할 수 있습니다. 나는 당신이 -f밀 때, 밀기를 강요 하기 위해 옵션 을 사용해야한다고 생각합니다 .


4
  1. 마지막 커밋의 해시 코드를 가져옵니다.

    • git log
  2. 커밋 되돌리기
    • git revert <hash_code_from_git_log>
  3. 변경 사항 푸시
    • git push

GHR에서 확인하십시오. 필요한 것을 얻을 수 있습니다. 유용하기를 바랍니다.

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