혼란 스럽기 때문에 혼란스러워하는 것 같습니다. 상황을 악화시키기 위해 리베이스를 수행 할 때 우리 전체 / 그들의 물건이 역할을 바꿉니다 (거꾸로 됨).
궁극적으로시 git merge
의 "우리"지사는 병합하고있는 지점을 말한다 에 :
git checkout merge-into-ours
"그들의"브랜치는 병합하고있는 (단일) 브랜치를 의미합니다 :
git merge from-theirs
"그들"과 "그들"은 어쨌든 "그들"이 아마도 당신의 것이더라도 "그들"은 당신이 달렸 을 때 당신 이 아니었던 것처럼 말이 됩니다 git merge
.
실제 브랜치 이름을 사용하는 것은 꽤 멋지지만 더 복잡한 경우에는 다릅니다. 예를 들어 위 대신에 다음을 수행 할 수 있습니다.
git checkout ours
git merge 1234567
raw commit-ID로 병합하는 곳. 더 나쁜 것은, 당신은 심지어 이것을 할 수 있습니다 :
git checkout 7777777 # detach HEAD
git merge 1234567 # do a test merge
이 경우 관련된 브랜치 이름 이 없습니다 !
나는 여기에 약간의 도움이된다고 생각하지만 실제로 gitrevisions
구문 에서는 충돌하는 병합 중에 인덱스의 개별 경로를 숫자로 참조 할 수 있습니다
git show :1:README
git show :2:README
git show :3:README
1 단계는 파일의 공통 조상이고 2 단계는 대상 분기 버전이며 3 단계는 병합하려는 버전입니다.
"우리"와 "그들의"개념이 rebase
바뀌는 이유는 일련의 체리 픽을 익명 브랜치 (분리 된 HEAD 모드)로 수행하여 리베이스가 작동하기 때문입니다. 대상 브랜치는 익명 브랜치이며 머지-온 브랜치는 원래 (사전 리베이스) 브랜치입니다. "-우리의"는 익명의 하나의 리베이스가 구축되는 것을 의미하고 "-그들의"는 "우리의 브랜치가 기반을 둔"을 의미합니다. .
gitattributes 항목에 대해서는 다음 과 같은 효과가 있을 수 있습니다. "우리의"는 실제로 "단계 2 사용"을 의미합니다. 그러나 당신이 알다시피, 그것은 실제로 당시의 장소 가 아니기 때문에 그렇게 해서는 안됩니다. 여기에 영향을 미치지 합니다 ... 시작하기 전에 작업 트리에 복사하지 않으면 안됩니다.
또한, 이것은 우리와 그들 모두의 모든 용도에 적용되지만 일부는 전체 파일 수준에 있습니다 (-s ours
병합 전략, git checkout --ours
병합 충돌시) 일부는 조각별로 조각으로 있습니다 ( -X ours
또는 -X theirs
중-s recursive
병합). 어느 혼란을 도울 수 없습니다.
그래도 나는 이것들에 대한 더 좋은 이름을 찾지 못했습니다. 또 다른 질문에 대한 VonC의 답변 을 참조하십시오 . 여기서 git mergetool
더 많은 이름을 도입하여 "로컬"및 "원격"이라고합니다!