2017-10-18 7 views
1

많은 사람들이 콘텐츠 변경 후 이름 변경을 감지하지 못한다는 질문을 많이 받았습니다. 다른 문제가 있습니다 : 공통 조상에 f_rename.txt 파일이 있습니다. 한 지부 (가 분기), 이름 변경 (만하지 내용 변경)에 는 f_rename_2.txt하는 지점은 이름을 다른에 를 f_rename_1.txt하는두 브랜치에서 이름을 바꿀 때 힘내 이름을 바꾸지 못했습니다.

두 가지를 병합 할 때, 나는 충돌을 얻을

:

enter image description here

Git이 이름 바꾸기 작업을 감지하지 못하고 f_rename_1이 (가) 새 파일 인 것으로 가정하고 충돌로 표시되는 경우에도이 동작을 이해할 수 없습니까? 무엇과 충돌 하는가? enter image description here

내가 이름을 기다리고 있었다/Git conflict (rename/rename)

내가 어떻게 해결하라는 게 아니에요로 이름을 바꿉니다

단계 파일을 보면, 수정되지 파일 (같은 SHA1)가 분명하다 충돌!,하지만 Git이 왜 이런 식으로 행동하는지. 내가

감사 보아스

+0

이름 바꾸기가 감지되지 않으면 충돌을 유발하지 않습니다. 그러나 git는 두 개의 이름 변경이 일어난 것을 알고 있기 때문에 분명히 서로 충돌하여 충돌을 일으 킵니다. 두 개의 이름이 충돌하지 않는 이유는 무엇이라고 생각하십니까? 그들은 동일한 파일을 두 가지 방법으로 결합하여 불가능한 방식으로 처리합니다. 그것은 갈등입니다. –

+0

@ Nils_M 답장을 보내 주심에 감사 드리며, 많은 분쟁이있을 경우 이해할 수 없습니다. 어떻게 이름을 바꾸거나 이름을 바꿀 수 있는지 이해할 수 있습니다. –

답변

1

당신이 당신의 질문에 포함 된 이미지를 힘내 '2.13.3.windows.1'를 사용하고있어 git status 출력을 가지고있다.

git merge 명령으로 예상되는 CONFLICT (rename/rename):이 인쇄됩니다.

추적 이제는보고있는 색인에 남아있는이 흔적은 인덱스에 원래 이름 (단계 2 또는 단계 3 항목 없음)이 하나씩 있다는 것입니다. 새 이름 중 하나 (단계 1 또는 단계 3 항목 없음)에 대한 단계 2 항목과 다른 새 이름 (단계 1 또는 단계 2 항목 없음)에 대한 단계 3 항목. git status 명령은 해당 종류의 추적에 대한 출력을 인쇄합니다.

동일한 출력을 나타내는 linked question에 대한 대답을 확인하십시오. both deleted 라인은 출력이 파일 이름별로 정렬되고 나중에 w으로 시작하는 will-be-deleted이 나오기 때문에 나중에 나오는 것입니다.

+0

@torek, 소수 이상인 경우 개발자는 이러한 세 가지 갈등을 분석하고 감지하여 이름 바꾸기/이름 바꾸기를 이해해야합니다. 이 분석을 쉽게 할 수있는 방법이 있습니까? –

+0

'git merge' 명령의'CONFLICT ...'오류 메시지 출력을 저장하면 필요한 정보를 얻을 수 있습니다. Git이 이것을 인덱스에 쓰고 자동화를위한 검색과 더 나은'git status' 결과물을 만들어야한다고 생각합니다. 왜냐하면 내가 "고수준"병합 충돌을 구별하기가 어려워지는 종류가 있기 때문입니다 그 데이터없이. (https://stackoverflow.com/a/44360581/1256452 참조) – torek