2015-01-28 1 views
0

최근에 다시 브랜딩되었습니다. 즉, master에서 새 분기를 만들고 기능 분기에 병합했습니다. TASK-123, 새 분기 TASK-123-b으로 병합 된 지형지 물 분기를 대체합니다. 기능 브랜치가 master과 충돌 할 때마다 git 워크 플로의 정규 작업입니다.자식을 사용하여 커밋에 부모를 어떻게 추가합니까?

TASK-123TASK-123-b에 병합 할 때 병합 충돌이 발생했으며,이를 해결하고 커밋했습니다. 새로운 지점, TASK-123-b, 유일한이, TASK-123에 병합 커밋 한 부모 : master

가 어떻게이 수정할 수는 모두 masterTASK-123는 부모가 그래서 커밋? 나는 git rebase이 관여 될 것이라고 가정하지만, 부모 분기를 추가하는 방법/커밋을 커밋하는 방법을 모르겠습니다.

커밋 나의 역사는 현재 다음과 같습니다

master -*---*-----* ... 
      \   \ 
    TASK-123 *---*-* \ 
        \ \ 
TASK-123-b   \---* ... 

참고 :

master -*---*-----* ... 
      \   \ 
    TASK-123 *---*-* \ 
         \ 
TASK-123-b    * ... 

내가 같이 내에게 역사를 저지하려는 I 원격 아직까지 TASK-123-b을 밀어하지 않은, 그래서 리베이스 커밋을하면 동료들에게 문제가 발생하지 않습니다.

답변

1

TASK-123의 병합을 TASK-123-b에 다시 실행해야합니다. 원하는대로 작동하지 않는 것처럼 보입니다. 당신이 지점 포인터를 재설정하면

$ git merge TASK-123 

: 그런 다음 병합을 반복

$ git checkout -B TASK-123-b abc123 

을 : 그렇게하려면 그냥 병합하기 전에 TASK-123-B의 해시를 커밋하고 거기 브랜치 포인터를 다시 찾을 수 이전 병합 커밋은 고아가 될 것이고 특히 논증으로 언급하지 않는 한 로그에 나타나지 않을 것입니다. 다시 가져 오려면 해시가 reflog에 기록되거나 해시를 어딘가에 복사 한 다음 checkout -B 명령을 사용하여 필요할 경우 다시 되돌릴 수 있습니다.

$ git checkout TASK-123-b 
$ git merge TASK-123 

을 그리고 이전 분기 제거 : 다시 충돌을 해결하지 않을 경우

, 다음 분기 포인터를 재설정하지 않습니다, 단지 다시 병합

$ git branch -d TASK-123 
+0

첫 번째를 대답의 일부가 나를 위해 일했습니다. 내가 어떻게 든 내가 갈등을 해결하는 동안 병합을 시도하고 있지 않다는 것을 밝혀 냈다. 내가 그것을 다시 할 때, 나는 그것을 올바르게 얻었다. 호기심에서 임의의 부모가 커밋/분기를 저지르는 방법이 있습니까? –

+2

@MartinCarney : 낮은 수준의'git commit-tree' 명령을 사용하면 부모님이 좋아하는 것을 커밋 할 수 있습니다 (부모는'-p' 인수에서옵니다). 그런 다음 새 커밋을 수동으로 참조해야합니다. 정지 된 (예를 들어, 충돌 한) 병합은 합병 될 커밋의 ID를 포함하는 파일'MERGE_HEAD'를 남기고'git commit'은 첫 번째 부모로'HEAD'로 다음 커밋을하고' 두 번째 부모로 'MERGE_HEAD'를 (를) 사용합니다. 어떻게 든 MERGE_HEAD 파일을 잃어버린 것처럼 들립니다. – torek

+0

커밋 개체를 수동으로 작성할 수 있습니다. http://git-scm.com/book/en/v2/Git-Internals-Git-Objects#Commit-Objects 또는 첫 번째 부모가 될 작업을 체크 아웃 할 수 있습니다. , 다음과 같이 merge를 실행한다 :'git merge parent-2 parent-3 ...parent-n'을 실행 한 다음 모든 병합 충돌을'checkout --ours'로 수정합니다. 나는 그것이 효과가있을 것이라고 생각한다. –