2013-08-13 3 views
0

br1()에 br2 두 개의 분기를 병합하려고합니다. 1.txt은 두 브랜치 모두에있는 파일입니다. br2에서이 파일을 다른 디렉토리로 이동 1.txt은 이제 sub/1.txt입니다. 병합이 끝나면 1.txtbr1 : 1.txtsub/1.txt인데 이상하게 보입니다.자식 병합으로 파일이 삭제되지 않음

1.txt 파일을 cherry-pick 파일로 옮긴 커밋을 올바르게 적용하면 서브 디렉토리로 이동됩니다.

왜 병합 중에 하위 디렉토리로 이동 (복사)되지 않습니까?

$ git --version 
git version 1.8.1.1 
+0

질문에 msysgit 태그가 지정되었습니다. 당신이 Windows를 사용하고 있다고 말하는 것이 맞습니까? Windows 시스템의 파일 이름에 대소 문자가 구별되지 않는 문제가있을 가능성을 조사 했습니까? –

+0

@Cupcake, 파일 이름은 같은 경우입니다. –

답변

1

답변을 찾았습니다. 병합 기준에 문제가있었습니다. 기본적으로 head에서 merge-base까지는 파일 삭제가 없었기 때문에 git이 cherry pick으로 파일을 제거하고 병합하지 않았습니다.

1

br2에서 파일을 명시 적으로 제거하지 않았습니까?

파일을 이동하는 일반적인 방법은 git mv를 사용하는 것입니다. 즉, 다음과 같습니다

git checkout br2 
git mv 1.txt sub # Moving 1.txt to sub/ using git mv command 
git commit 

git checkout br1 
git merge br2 # You should see now the file 1.txt only on sub/ 

당신이 그런 일을 한 경우, 하나의 가능성은 어떤 이유로 1.TXT이었다에 대한 몇 가지로 상단 폴더에 그 BR1에 있으며 BR2에 따라서 일을하지 커밋 "소개"이다 해당 지점 간의 병합은 둘 모두를 유지합니다.

아마도 지점이 아닌 곳에서 git log <hash-of-commit-where-you-moved-the-file> --stat --pretty=oneline --abbrev-commit 및/또는 git log 1.txt을 게시하면 더 잘 이해할 수 있습니다.

+0

'git add .'는 [불필요한] 것입니다 (http://stackoverflow.com/questions/1094269/whats-the-purpose-of-git-mv). – antak

+0

당신이 맞아요, @ git mv 이미 자식 추가 작업이 포함되어 있습니다. 답변이 수정되었습니다. – llekn