2017-03-24 15 views
5

두 번째로 올바르게 해결할 수 있도록 병합 충돌을 다시 만들고 싶습니다.푸시 후 재발급 git 충돌 해결 다시 시도

예 :

  • 지점 'A'체크 아웃.
  • 분기 'B'가 병합됩니다.
  • 병합이 merge (머지 커밋 만들기)에서 해결되었습니다.
  • 리모콘으로 푸시.
  • 다른 사람이 지점 'A'에 병합하고 리모컨으로 밀어냅니다.
  • 오, 이런, 내 갈등 해결이 잘못되었다는 것을 깨달았고, 나는 내 대신에 그들과 함께 갔다.
  • 이제 어떻게 되나요?

나는 본질적으로 충돌 해결 부분을 다시하고 싶다.

브랜치가 이미 리모컨으로 푸시되었으므로 HEAD를 다시 설정할 수있는 옵션이 없습니다. 갈등 해소가 잘못되었다는 것을 깨닫기 전에 다른 사람들이 그 일에 전념 할 가능성이 있습니다.

브랜치 'A'에서 직접 수정하지 않으려합니다.

체리 피킹을 피하고 싶습니다. 나는 표준 되돌리기를 할 수 있고 체리는 내 커밋을 선택한다는 것을 알고, 나는 이것을하고 싶지 않다.

이렇게하면 어떤 효과가 있습니까?

나는, 을 병합 되돌리기를 되 돌린 다음 커밋 복귀가 다시 돌아 가지 'B'를 합병 시도했지만 불행히도 난 그냥 이미 '표준을 얻을, 충돌에게 두 번째 라운드를 해결하기 위해 저를 요구하지 않습니다 최신 '메시지가 표시됩니다.

간단히 말하자면 충돌을 다시 작성하여 두 번째로 올바르게 해결할 수 있습니다.

도움이 될 것입니다.

감사합니다.

+0

나는 이것을 merge 나 revert로하려고하는 것을 삼가하고 수리를 통해 branch A에 직접 커밋을 시도한다. – Schwern

답변

6

두 단계가 있습니다. 먼저 병합과 충돌을 다시 만듭니다. 두 번째는 그것을 지점의 새로운 팁에 적용하는 것입니다.

다음과 같은 것들이 있습니다.

1 - 2 - 5 - 6 - 7 - 9 - 10 [A] 
    \  /
     3 - 4 - 8 

7은 병합 커밋하고 해당를 다시 너무 많은 일이 위에 쌓여 되었기 때문에 혼란 얻을 수 있습니다 A. 리베이스의 상단에있는 수정 사항을 적용 할 수 있습니다.

먼저 병합 충돌을 다시 만듭니다. 그렇게하기 위해 우리는 단지 그것을 다시 끝낼 것입니다. A는 당신이 실제가 ID를 커밋 결정 git log --graph을 사용해야합니다 당신이 합병 할 때, 그리고 8

git checkout 6 
git merge 8 

와 병합 위치를 체크 아웃 (6), 즉이다. 이제 병합 충돌이 발생했습니다.처럼 해결하십시오. 그러나 커밋하지 마십시오.. 대신 숨기십시오. git stash save. 그러면 "the stash"이라는 구석에 diff가 저장됩니다. 이것은 패치를 저장하는 공식적인 방법 일뿐입니다.

이제는 충돌 해결 방법을 얻었으므로 A를 체크하고 은닉에서 수정 프로그램을 적용하십시오.

git checkout A 
git stash pop 

A가 변경되었으므로 새로운 충돌이 발생할 수 있습니다. 괜찮아. 정상적으로 해결하고 커밋하십시오.