2012-12-21 3 views
3

10 커밋 된 항목으로 .gitignore 파일을 변경했습니다. 오늘 내가 최신 코드를 가져 왔을 때, 내 변화는 없었습니다. 그래서이 명령을 실행했습니다 :.gitignore가 로그에 표시되지 않지만 diff 커밋을 위해 커밋에 표시됨

git log -p .gitignore 

그리고 마지막으로 파일을 변경 한 것이 제 것이 었습니다. 그때 나는 지금과 내 커밋 사이의 모든 커밋을 뽑아 내 변화를 제거한 커밋을 찾아 냈습니다. 그런 다음 나는 그 커밋과 그 커밋의 diff를 가져 왔고, 그 전의 커밋과 diff에서 파일에 대한 변경 사항을 볼 수있었습니다.

하지만 위의 명령을 통해 변경 사항을 볼 수없는 이유는 무엇입니까? 나는 또한 내가 궁금

gitk .gitignore 

를 사용할 때 난 나뿐만 아니라 다른 파일의 역사를 볼 때 이런 일이 있습니다,이 변화가 표시되지 않는 이유는 무엇입니까?

+0

현재 분기에서 모두 발생 했습니까? 로그에 --all을 사용하고 diff 옵션을 검사 할 수 있습니다. (.gitattributes가 있습니까?) – sehe

+0

'git log --all .gitignore' 또한 내 커밋을 마지막으로 보여줍니다. .gitattributes 란 무엇입니까? .git 폴더에는 표시되지 않습니다. –

+0

['gitattributes'] (http://git-scm.com/docs/gitattributes)는 git에게 특정 (또는 모든) 파일을 처리하는 방법을 명시 적으로 알려주는 데 사용됩니다. '.gitattributes' 파일은 생성하지 않으면 거기에 존재하지 않습니다. 질문 : git/info/exclude (gitignore 패턴이 있지만 로컬 전용이 아닙니다)에있는 항목이 있습니까? –

답변

0

어쩌면 당신이 다른 지점과 병합하여 도입 된 얘기가 바뀌었을까요? 여러 가지 병합 전략이 있으며, 커밋이 연대순으로 마지막일지도 모르지만 병합 절차는 전략 규칙을 준수하는 오래된 커밋을 선호 할 수 있습니다.

기본적으로 자식은 recursive 전략을 사용하여 만들어진 순서대로 커밋을 정렬합니다. 그러나 아마도 여러분의 경우 병합은 oursheirs 전략을 사용하여 한 지점의 커밋을 다른 커밋보다 더 선호합니다. 그래서 당신이 실제로 기대하는 것을 보지 못할 수도 있습니다.

전략에 대한 자세한 내용을 보려면 this Q&A을 방문하십시오.

+0

내 코드를 undid 변경 사실 참으로 병합의 결과입니다. 팀원 중 한 명은 실제로 다른 회사의 아웃소싱을 통해 팀에서 진행중인 것과 동일한 프로젝트에서 작업하고 쉘에서 명령을 입력하는 대신 turtoisegit을 사용합니다. 그의 자식 버전에서 다른 전략을 사용했을 가능성이 큽니다. 병합에 사용 된 전략을 알아내는 방법은 없습니다. –

+0

내가 기억하는 한, 전략에 대해 확실히 알아낼 방법이 없습니다. 그러나 공통 논리를 사용하여 확실히 가능합니다. 로그 커밋에서 연대순이 아니라는 것을 알게된다면 ... 이것은 재귀 적 병합이 아닙니다. 이 병합을 회사에 요청하여 일반적인 관행대로 시작해야합니다. 예를 들어,이 링크는 다음과 같이 도움이됩니다. http://nvie.com/posts/a-successful-git-branching-model/ 다소 복잡해 보일 수도 있지만 의미가 있습니다. '--no-ff' 플래그와 병합하여 적어도 하나의 조언을 고려해야합니다. 적어도 병합 작업 중 모든 커밋을 던지지는 않습니다. – shytikov

관련 문제