2013-10-23 2 views
2

수정 버전이 A-B-C-D-E-F-G-H-I-J-K-L-M 인 Repo가 있다고 가정 해보십시오. 파일 foo.txtB, G, J으로 수정 (또는 생성)됩니다. 나는 git log -- foo.txtfoo.txt에 대한 간단한 명령으로 B-C-E-G-J를 얻을 수 있도록 추가해서 foo.txt의 역사에 개정 CE을 바인딩 할. 그것을 성취 할 수있는 방법이 있습니까?git의 특정 리비전에서 수정되지 않은 파일을 추적하는 방법은 무엇입니까?

이것이 불가능할 경우 좋은 대안이 있습니까?

이유는 ~ M 오래된 프로젝트의 스냅 샷을하고 나중에 자식의 repo에 가져온 것입니다 (자세한 내용은 따라). 과정 중에 어떤 일이 일어 났고 스냅 샷 C와 E의 foo.txt의 실제 상태는 누락되었습니다. 두 가지 모두 실제로 foo.txt가 수정되었습니다. 그러나 C와 E의 변경 메시지 (커밋 메시지)는 foo.txt의 변경 과정과 관련이 있으며 foo.txt의 히스토리 목록에 포함되어야합니다. git add -- foo.txt 것처럼 실행 및 개정 C에 효과 E.

+0

내가 볼 수있는 유일한 방법은 내가 질문의 원래 버전에서 충분히 내 문제를 설명되지해야합니다 (등, 공백을 추가 라인을 추가) 역사를 수정하고 실제로 문제의 파일을 편집 – knittl

답변

2

당신이 git log -- foo.txt을 실행, 해당 파일을 변경 한 경우에만 커밋을 받고 촬영했다 때 git log -- foo.txt, 그러므로 나는 그들의 커밋 메시지를 수신합니다. 따라서 전체 트리가 아닌 A-D가 커밋되는 이유는 foo.txt가 B & C에서 변경되지 않았기 때문입니다.

Git은 각 커밋에서 시스템 변경 사항을 저장합니다. 커밋 B & C에서는 foo.txt가 변경되지 않았습니다. 따라서 커밋은 해당 파일을 수정하지 않습니다. 일부 파일이 git add foo.txt으로 실행 되었어도 파일에 변경 사항이 없으므로 추가 또는 커밋 할 것이 없습니다. 파일 이름을 추가

당신이 프로젝트의 과정에서 변경 방법을 볼 수 있도록 파일의 변경 사항을 추적 할 수 있습니다.

A & D 사이의 모든 커밋을 가져 오려면 git log A..D을 실행하고 싶습니다. --name-only 옵션을 추가하여 각 커밋에서 변경된 파일을 보거나 -p 옵션을 사용하여 해당 커밋의 모든 변경 사항을 볼 수 있습니다.

+0

그래서 내가 편집 기후. 답변 해 주셔서 감사합니다. 그러나 필요한 것은 다른 답변입니다. –

관련 문제