2013-12-17 3 views
1

내 .gitignore 파일이 내 자식 저장소에 커밋되지 않은 것을 발견했습니다. 나는 저의 저장소에서 약 300 개의 커밋을 만들었습니다. 저는 git flow model을 사용하고 있습니다. 이제 master, develop, 그리고 몇 개의 feature 브랜치를 가지고 있습니다.은 먼저 커밋을 수정하거나 그 전에 새로운 커밋을 추가해야합니다.

저는 어떻게 생각 하나 신경 쓰지 않고 처음 수정하고 싶습니다. 어떻게 든 커밋하고 그 이후의 모든 버전을 커밋하십시오.

  1. 은 .gitignore를 추가로 새 1 만 .gitignore 파일을 포함 커밋하기 전에 커밋 : 제가보기에는

    내가 두 가지 옵션이 있습니다.

  2. 에 첫 번째로 어떻게 든
내가 this link를 사용하여 옵션 # 1을 시도

하지만 REBASE에 내 가장 큰 파일 40메가바이트 전체 프로젝트 크기입니다

$ git rebase --onto newroot --root master 
First, rewinding head to replay your work on top of it... 
Applying: First Commit 
fatal: Out of memory, realloc failed 
Repository lacks necessary blobs to fall back on 3-way merge. 
Cannot fall back to three-way merge. 
Patch failed at 0001 First Commit 
The copy of the patch that failed is found in: 
    c:/Temp/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

이 1.6GB에 관한이 오류를 얻을 커밋 수정 . 이 명령을 실행했을 때 실행중인 모든 것을 닫았으며 사용 가능한 메모리가 약 10GB였습니다 (총 16GB).

어떻게하면 좋을까요?

+1

기존의 Repo를 수정하지 않는 이유는 무엇입니까? 원하지 않는 파일 등을 제거하십시오. – Robert

+0

새 파일을 추가해야합니다. 어떤 파일을 삭제 하시겠습니까? –

+0

나는 그것을 얻었다. 첫 커밋에서 그 파일이 정말로 필요한가요? 왜 단지 현재 업스트림에 추가하지 않는 것일까 요? – Robert

답변

0

나는 긴 rebase를 위해 메모리를 증가시켜야한다는 것을 알지 못했다. 흥미 롭 군.

단계별로 리베이스를 수행 할 수 있습니다. master을 타겟으로 삼을 필요가 없습니다. 당신은 지점을 따라 중간에 커밋하거나 길의 1/3을 줄 수 있습니다. 결국 마스터 태그가 이동하지 않으므로 태그 또는 임시 분기 이름을 드롭해야하지만 다음 비트로 리베이스 (rebase) 할 수 있으며 메모리를 모두 단계적으로 수행 할 수 있습니다 핸들. 마지막으로 git reset --hard을 사용하여 마스터를 새 지점으로 이동할 수 있습니다.

+0

이 필요합니다. 실패한 리베이스가 프로젝트 파일의 전체 1.6GB 인 첫 번째 커밋에있는 것처럼 보입니다. 난 그냥 rebasing 시도하고 곧 결과에 대한 업데이 트됩니다 –

+0

어쩌면 내가 당신을 이해하지 못했지만 "git rebase --onto newroot - 루트 d206a41"어디 d206a41 첫 번째 커밋의 ID입니다 실행 해봤 어. 다시 기억 상실증이 있습니다 –

+0

수술로 고칠 수 있지만 그 경로를 가고 싶지는 않습니다. 새로운 repo 생성, 원격으로 가져 오기, 커밋 정렬, 수작업 편집 커밋 및 수동 해시 반복이 필요합니다. –

1

대화 형 리베이스를 사용해 보셨습니까?

$ git rebase -i --root 

그런 다음 첫 번째 커밋에 "편집"을 넣습니다. 새 파일을 추가 한 다음 git rebase --continue을 입력하면 필요한 작업을 수행 할 수 있습니다.

+0

나는 VIM에서 빠르게 충돌 과정을 마친 후 (지금은 창문에 sourcetree를 사용한다) 첫 번째 커밋을 편집하도록 선택했다. "git add .gitignore"를 사용하여 gitignore를 추가 한 다음 "git commit --amend"및 "git rebase --continue"를 수행했습니다.리베이스가 세어 나기 시작했지만 "오류 : 6e2870c ... 리 포맷 web.config를 적용 할 수 없습니다"오류가 발생했습니다. 이 특정 커밋은 7 월에 지점을 개발하기 위해 병합 된 지사에 있습니다. 무엇이 문제 일 수 있겠습니까? –

+0

Rebase가 병합을 병합합니다. 병합을 보존하기 위해'-p'를 사용할 수는 있지만 대화 형 rebase와 편집과는 상호 작용할 수 있습니다 (문서 참조). 루트 커밋을 수정하는 것이라면 괜찮을 것이다. 그러나 rebase보다는'git filter-branch'를 원할지도 모른다. – torek

+0

torek, 첫 번째 커밋에 파일을 추가하는 방법이나 'git filter-branch'를 사용하여 첫 번째 커밋을 추가하는 방법에 대한 샘플이 있습니까? –

관련 문제