2012-06-25 2 views
4

나는 상당히 이상한 상황에 처해 있었고 본질적으로 제 작업 상태를 두 가지 커밋으로 분리하려고합니다. 하나는 병합 커밋이고 다른 하나는 자체 커밋입니다. 여기 힘내 : 실패한 병합 이후의 로컬 변경 실행 취소

내려 갔다 내용은 다음과 같습니다

  1. 나는에 잠시 동안 그들에게
  2. git stash pop
  3. 작품을 수정, 일부 병합 충돌을 참조하십시오 git stash
  4. git rebase master
  5. 내 작업 상태를 저장 충돌이있는 파일

병합 충돌에 대한 수정을 커밋하는 것을 잊었 기 때문에 해당 파일은 여전히 ​​충돌로 표시됩니다. 그러나 그들은 또한 내가 원하지 않는 지역의 변화를 가지고있다.

목표

하나는 병합 충돌을 해결하고, 하나는 내 로컬 변경을 커밋 커밋. 현재 (충돌 한) 상태를이 두 커밋으로 분할하려면 어떻게합니까?

+0

무엇이 문제입니까? –

+0

@Michael 더 명확한 질문을하기 위해 업데이트되었습니다. – Wylie

답변

1

필자의 고유 한 솔루션을 찾았습니다. 필자의 변경 사항은 diff에서 별도의 청크 였기 때문에 작동했습니다. 여기에 내가했던 일이야 :

  • 특정 덩어리를 선택
  • 해당 파일을 unstage하기 위해 사용 가능한 상태
  • git reset로 내 작업 트리를 가져

    1. git add 모든 병합 파일로 커밋 git add --patch

    이 솔루션의 단점은 첫 번째 커밋에 발생 된 병합 충돌에 대한 자동 메타 데이터가없는 것입니다.

  • 1

    내 머리 꼭대기에서 떨어져서 유사한 상태로 리포를 가지고 놀지 않는 가장 좋은 계획은 현재 (병합 진행 진행 + 새 작업)이고, git reset은 병합하기 전입니다. . 병합을 다시 실행하고 커밋하는 것을 잊지 마십시오. 그렇다면 git stash pop,하지만 당신은 아마 당신이 할 때 그것을 밖으로 정렬하는 병합 충돌의 반대로 끝날거야.

    git add -i 등을 통해 병합에서 가져온 청크와 추가 작업을 구체적으로 구분할 수없는 경우를 제외하고는 알., 또는 병합 또는 추가 작업 중 하나를 던져 다시 시작 할만큼 중요하지 않은 경우 (당신이 REBASE을하고 있기 때문에) 당신은 git rebase --abort을 할 수

    +0

    제안 해 주셔서 감사합니다. 불행히도'git stash'는 실제로 해결되지 않은 충돌 때문에 실패합니다. 파일을 추가하기 전에 파일을 추가하면 문제가 될 것이라고 생각하십니까? – Wylie

    +0

    @Wylie 그러면'git stash'가 성공할 수 있습니다.또는 병합 결과를 'git reset'으로 병합하여 (병합 된 파일 중 일부가 다른 파일을 제외하고) 병합 결과를 병합 할 수 있습니다. 따라서 병합 진행중인 것으로 보이지 않습니다. – twalberg

    1

    하는 git stash 다시 다음 git rebase하려고 다시, 그리고 git mergetool와 충돌을 해결. 갈등이 끝나면 git rebase --continue.

    +0

    'git rebase --abort'에 대한 문서에서 커밋 이전의 상태로 복원하려고 시도합니다. 그 이후로 내 변화에 어떤 영향을 미칠까요? – Wylie

    +0

    오. 이것은 내가 생각했던 것보다 어렵다. 'git rebase --abort'를 만들기 전에'git stash'를 시도해보십시오. – YuriAlbuquerque

    +0

    병합 충돌로 인해'git stash'가 실패합니다. 이는 도구의 한계 인 것 같습니다. – Wylie