ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ Git & GitHub] Merge revert 후 재병합
    Git & Github 2022. 5. 7. 15:59

    1.  Revert 의 쓰임 (reset 과의 차별성)

    •  취소에 대한 이력을 남길 수 있다.
    •  특정 커밋만 취소할 수 있다. 
      • reset 은 특정 과거로의 회기인 반면 revert특정 커밋의 내용만 지움
      • git resset --hard HEAD~1, git revert [커밋 hash]

     

    2. PR Merge 커밋 지울 때 발생하는 오류 (-m 옵션)

    $ git revert 1123a41
    error: commit 1123a419d52f8eea2273411b4afdfa1914e4195c is a merge but no -m option was given.
    fatal: revert failed

     

    Merge revert 에 대해서는 특별히 -m 옵션을 추가해주어야합니다.

    - m 옵션에 대한 설명은 아래와 같습니다. 

     

    간단히 설명하자면 merge 를 취소했을때 합쳐진 두 브랜치에서 어떤 브랜치 방향으로 돌아가고 어떤 브랜치를 취소할지를

    알 수 없기에 이에 대한 정보를 추가적으로 요구한는 것입니다.

     

       -m parent-number, --mainline parent-number

               Usually you cannot revert a merge because you do not know which

               side of the merge should be considered the mainline. This

               option specifies the parent number (starting from 1) of the

               mainline and allows revert to reverse the change relative to

               the specified parent.

     

    -m 옵션을 추가해주는 방법은

     

    1. 로그를 통해 누가 부모(1번) 인지를 확인

    •  Merge : 란에 앞에 오는 hash 가 1 뒤에오는 것이 2로 판단합니다..
    $ git log

     

    2. git revert -m [숫자]

    • 돌아갈 브랜치의 커밋에 해당하는 숫자를 기입해주면 됩니다.

     

    3.  revert 이후 재병합

    revert 의 특징은 회기가 아닌 특정 커밋내용만 삭제하는 것입니다.

    따라서 재병합을 하게되더라도 과거에 같은 커밋이 존재하기 때문에 원하는데로 재병합을 할 수 없습니다.

     

    아무런 조치없이 재병합할 경우

    Already up to date. 가 뜰 것입니다.

     

    해결방법은 revert 를 reset 하는 방법도 있지만

    revert 이력을 남기고 싶다면 cherrypick 을 이용하는 것이 좋겠습니다.

     

    재병합을 원하는 커밋들을 rebase interactive 를 통해 내용은 놔두고 이름만 수정함으로써 다른 hash 를 가진 커밋으로 

    복사했고 이 복사한 커밋들을 cherrypick 하여 머지했습니다.

     

     

     

     

    댓글

Designed by Tistory.