2012-11-08 5 views
0

여러 커밋 (커밋)을 변경했다고 가정 해보십시오. 예를 들어, A, B, C의 3 가지 커밋이 있습니다.git에서 특정 커밋 (이전 히스토리)에서 파일 제거

커밋 B에서는 커밋하지 않아야하는 특정 파일 (변경 사항 포함)을 추가했음을 알았습니다.

커밋에서 해당 파일을 어떻게 제거 하시겠습니까?

예를 들어 좋을 것입니다.

감사

답변

1
git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD 

이 명령은 [역사에서] 모든 커밋에서 파일을 제거합니다.

경고 : 이미 다른 사람들과 작업을 공유 한 경우이 명령을 사용하지 않는 것이 좋습니다. 이 명령을 사용하기 전에 모든 것을 이해했는지 확인하십시오. 당신은 또한

git rebase --interactive A

을하고

하지만 같은 경고가 을 적용하고 당신이 어떤에서 파일을 변경하면이 실패합니다 B 후 커밋 문제의 파일을 포함하지 않는 B를 저지 편집 할 수

+0

그러나 모든 커밋에서 파일을 제거하는 것은 바람직하지 않습니다. 어쩌면이 파일은 오래 전에 한 번 푸시되었으므로 변경하거나 다시 누를 필요가 없었을 것입니다. 맞습니까? – Hossein

+0

@Hossein은 기록에서 삭제할지 여부에 달려 있습니다. 그렇지 않다면 다음 커밋에서 파일을 삭제하는 것이 더 나을 것입니다. 전체 기록에서 삭제하려는 경우 (예 : 암호와 같은 내부적 인 개인 데이터를 가지고 있다면 누군가가 이미 커밋을 가져왔다면 어쨌든 운이 좋을 것입니다. [Mercurial FAQ] (http://mercurial.selenic.com/wiki/FAQ#FAQ.2FCommonProblems .I_committed_a_change_containing_nuclear_launch_codes.2C_how_do_I_delete_it_permanently.3F) 모든 DVCS에 적용됩니다. – peterph

관련 문제