2010-02-24 10 views
6

실수로 log/test.log를 커밋했지만 결코 밀어 넣지 않았습니다. 나는 그걸 제거하기 위해 그때 이후로 힘쓴 일을했다. 그러나 밀어 넣으려고 할 때 나는 아직도 많은 양의 데이터를 전송하려고하고있다. git rm이 그 문제를 수정해서는 안됩니다. 그렇지 않다면 어떻게 해결할 수 있습니까?대용량 파일을 제거한 후 git push

답변

11

거대한 파일이 기록에서 계속 옮겨 지므로 커밋을 취소 한 다음 밀어 넣지 마십시오.

당신이 아직 추진되지 않았는지 그리고 당신이, 즉 당신의 역사에서 커밋 가장 최근에 제거되어 다시 할 커밋을 감안할 때 : 이것은의 상태로 인덱스를 반환합니다

$ git reset HEAD^

부모 커밋 (HEAD^)에서. 이제는 멀리건 (mulligan)이 있습니다. 처음으로 의미했던 방식을 추가하고 저지하십시오.

다른 후속 커밋을 작성한 경우 git rebase -i <commit>이 필요합니다. 여기서 <commit>은 나쁜 커밋의 상위의 SHA-1입니다.

예를 들어

(및 SHA-1이 당신의 repo에서 다를 수 있습니다)

$ git rebase -i 57d0b28

가있는 라인에 editpick 교체

pick 366eca1 This has a huge file 
pick d975b30 delete foo 
pick 121802a delete bar 

# Rebase 57d0b28..121802a onto 57d0b28 
# 
# Commands: 
# p, pick = use commit 
# r, reword = use commit, but edit the commit message 
# e, edit = use commit, but stop for amending 
# s, squash = use commit, but meld into previous commit 
# 
# If you remove a line here THAT COMMIT WILL BE LOST. 
# However, if you remove everything, the rebase will be aborted. 
#

유사한 편집기에서 당신을 떨어질 것 무거운 커밋

edit 366eca1 This has a huge file 
pick d975b30 delete foo 
pick 121802a delete bar

저장 및 종료 편집기는

$ git rm --cached big-nasty-file 
rm 'big-nasty-file'

수정 (--cached는 인덱스에서 파일을 제거), 양식 거기에서

Stopped at 366eca1... This has a huge file 
You can amend the commit now, with 

    git commit --amend 

Once you are satisfied with your changes, run 

    git rebase --continue

의 메시지가 나타납니다 쉘에 반환 잘못된 파일을 삭제하기

$ git commit --amend

을 커밋하고 REBASE

를 완료 10
+0

커밋에 대한 SHA1 주소를 어떻게 얻습니까? – Daniel

+0

@Daniel 예를 들어'git log' 또는'gitk'를 실행하십시오. –

2

푸시하지 않은 경우 git rebase -i을 사용하여 커밋 내역을 편집하여 addrm을 제거 할 수 있습니다. 주의해야 할 점은 이미 푸시 된 커밋을 편집하지 않도록주의해야한다는 것입니다.

http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

당신이 한 다음 커밋 및 기타 커밋의 다른 변경 사항이있는 경우 당신은 여전히이 작업을 수행 할 수 있는지 여부를 물었다. 그것은 달려있다. 최신이 아닌 커밋되지 않은 커밋을 편집/제거 할 수 있어야합니다. 그러나 나중에 변경된 사항이 삭제 된 커밋의 변경에 크게 의존 할 경우 (예 : 파일을 추가 한 다음 나중에 커밋 할 때 편집 한 경우) rebase가 실패 할 수 있습니다. ? L 트를 h 제하면 해당? 미트의 모든 변경 사항이 유실됩니다. 나는 커밋에서 하나의 변경을 제거하는 방법을 모른다. test.rb 커밋에서 다른 변경 사항을 잃지 않으려면 커밋을 삭제하기 전에 패치 ( git show <commitid> > /tmp/patch 또는 내장 된 git patch 기능 포함)를 생성 할 수 있습니다. 그런 다음 패치 파일을 편집하여 큰 test.rb 파일을 제거하고 원하는대로 변경 한 다음 패치를 헤드에 다시 적용하십시오.

rebase가 실패한 곳에서 언급 한 문제가 있거나 문제가 있다고 생각되면 문제가 커밋 된 후 에 대한 패치를 저장하고 모두 삭제 한 다음 순서대로 다시 적용 할 수 있습니다.

+0

비록 내가 밀어 넣지는 않았지만, 이후로 여러 차례 커밋을했습니다. 리베이스는 여전히 옵션입니까? (우발적 인 log/test.rb 커밋에는 파일 수가 많았습니다.) – Daniel

관련 문제