2012-07-12 7 views
1

그래서 같은 파일 프로젝트를 주어졌다 파일을 처음부터 repo에 저장하십시오. 대신 파일을 변경해야한다는 것을 알기 전에 파일을 repo에 추가했습니다.트랙 변경

git add a.txt; git commit -m "Pristine A" 
<awesome changes to a.txt> 
git commit -am "Awesome Changes" 

불행히도, 열심히 미친 편집에서 일부 파일을 위해 이것을 잊어 버렸습니다. (읽기 :. 파일의 수만을 명시 적 경로 찾기 힘들 될 것 많은 디렉토리에)

<awesome changes to b.txt> 
git status # Uh oh, new file b.txt 

내가 내 멋진 변경 전에 프로젝트의 스냅 샷을 얻을 수 있습니다, 힘내 말해 줄 수 있도록하는 그 이후로 파일이 변경되었습니다. 그러나 나는 이미 추가 한 수십 개의 커밋 (설명 포함)을 잃고 싶지 않습니다.

은 어떻게 "깨끗한"스냅 샷을하고 힘내 기존 커밋을 잃지 않고 변경을 한 그 파일을 잘못된 반응을받지 않고, 내 작업 디렉토리에 비해 변화가있는 파일을 계산해야하지만 이미 기록되어 있습니다 커밋에?

FWIW는 시작에 전체 디렉토리를 추가하지 않는 내 원래 "정당화는"내 작품과 관련이없는 파일의 수천이 있기 때문에, 디렉토리가 높은 대기 시간 SMB 이상에서만 사용할 수 있습니다, 나는 생각했다 그 중요한 파일이 무엇인지 알았습니다.

+0

이 모든 것이 한 분기에 있습니까? – vergenzt

+0

@vergenzt 예, 모두 마스터 브랜치에 있습니다. – Phrogz

+0

더 명확히하기 위해 정확합니다. 현재 repo는 나중에 커밋에서 "b.txt"와 "c.txt"를 "생성"한 것으로 표시하지만 생성 된 것으로 표시하려고합니다 (예 : 당신이 가지고있는 깨끗한 사본)을 처음 커밋에 넣었습니까? ** 편집 : ** 신경 쓰지 마세요. 이제 질문을 이해합니다. – vergenzt

답변

3

깨끗한 스냅 샷을 사용하여 새 저장소를 만들고 (모든 파일을 추가하고 커밋하십시오). 현재 저장소에

는 사이에 완전한 DIFF을보고 이후

git remote update pristine 

이제 git diff

git diff pristine/master 

에 깨끗한 저장소의 마스터를 참조 할 수 있습니다

git remote add pristine /path/to/pristine/repository 

을 작업 디렉토리와 원시 커밋. 변경 집합 만 필요한 경우 --summary을 원하는 옵션으로 설정해야합니다. git diff 매뉴얼 페이지는 다른 모든 스위치를 자세히 설명합니다.

이렇게하면 이미 추가 된 파일이 이미 수정되었지만 추가되지 않은 파일과 다르게 언급되는 변경 집합이 생성됩니다.

당신이해야할 일은 나에게 달렸지 만 초기 커밋을 사용하고 리베이스를 사용하여 트리의 맨 앞에 놓고 모든 파일을 추가 한 후 모든 커밋을 재생할 수 있어야합니다.

+1

'git remote update pristine'을 수행하여 원시 repo를 가져 오는 경우,'pristine/master'를 사용하여 해시를 어딘가에 내려 쓰지 않고 마스터 브랜치를 참조 할 수 있습니다. 프로세스가 조금 더 간단하고 견고해질 수 있습니다 . – araqnid

+0

감사합니다. – Femaref