Git로 한 번 더 합쳐볼게요.
병합 해제
지트로 구성관리를 하고 합병은 했지만 나중에 취소하려고 할 때도 있다.이 경우 병합된 제출을 지정하십시오
만약
$ git revert -m1 マージコミット
이라면 합병에서 포획된 변화의 적자점을 적용하여 원수를 기대 상태에 있게 한다.예를 들어 합병 후의 변경에 문제가 있어 잠시 취소한 후에 발표하는 경우 리베이트를 이용하여 합병을 취소할 수 있다.
재결합 취소된 결합
합병을 취소한 후 변경에 문제가 있다는 것을 깨닫는 것은 잘못된 인식이다. 다시 얻으려는 상황이나 변경 내용의 전부에 문제가 있는 것이 아니라 추가로 수정하고 다시 얻으려는 상황에 대해 고려한다.
목표 제출
git merge
을 지정해도 취소된 합병을 다시 적용할 수 없습니다.$ git merge --no-ff マージコミット^2
Already up to date.
여기マージコミット^2
는 합병하여 제출한 두 번째 아버지다.첫 번째 부모는 합병 전 HEAD, 두 번째 부모는 합병 후 제출한 대상의 제출이다.더 이상 적용할 수 없는 이유는요.
$ git merge-base --is-ancestor マージコミット^2 HEAD
$ echo $?
0
에서 알 수 있듯이 역사 기록에 이미 이 제출이 포함되어 있다.Giit는 DAG(Directed Acyclic Graph, 비순환 그래프)에 제출된 역사를 유지하고 같은 제출 대상이 다시 역사 기록(DAG의'A', 즉'Acyclic'의 제약)에 들어가는 것을 허용하지 않는다.
그럼 어떻게 하면 좋을까요?취소된 병합을 다시 적용하려면 취소를 취소할 수 있습니다.
$ git revert リバートコミット
따라서 정렬 트리는 응용 합병 제출 상태에 있습니다.취소로 인해 해결할 수 없는 상황
위에 적힌 리베이트는 일반적으로 리베이트가 있지만 해결할 수 없는 경우도 있다.예컨대
보통
git revert -m1 Aのマージコミット
이지만 이렇게 되면 충돌을 다시 없애야 한다.B를 먼저 합병하면 충돌을 해소할 필요가 없는데 방법이 없나요.일단 쌍방의 합병을 취소합시다.$ git revert -m1 Bのマージコミット
$ git revert -m1 Aのマージコミット
는 두 개의 합병이 취소되었다.여기서 B 를 다시 적용해보자면.$ git merge --no-ff Bのマージコミット^2
Already up to date.
여전히 적용되지 않습니다.Acyclic의 제약이 여기서도 나타났다.다시 적용하기
재적용을 위해서는 대상의 제출을 재제작할 필요가 있다.다시 적용하고 싶은 제출 프로그램 하나 또는 두 개
git cherry-pick
가 있으면 순서대로 적용할 수 있다.cherry-pick는 각자 제출한 차점을 적용해 제출 자체가 재실행되기 때문에 에이치클릭의 제약을 피했다.순서대로 적용하는 게 번거롭거나 제출이 너무 많아 하나하나 할 수 없다면
git rebase
다시 지점을 만들어 제출한 뒤 통합하면 된다.$ git checkout -b branch-for-rebase-B Bのマージコミット^2
Switched to a new branch 'branch-for-rebase-B'
$ git rebase -f $(git merge-base Bのマージコミット^1 HEAD)
Current branch branch-for-rebase-B is up to date, rebase forced.
Successfully rebased and updated refs/heads/branch-for-rebase-B.
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff branch-for-rebase-B
Merge made by the 'recursive' strategy.
기준점을 이동하지 않기 위해 다시 제출하기 위해rebase에 - f 옵션을 추가합니다.포크를 사용할 수 있는 상황
이전에 역사를 바꾸지 않고 통합을 다시 적용하는 방법을 설명했지만, 통합 제출을 원격으로 누르지 않거나 force push를 허용하지 않으면 다른 해답으로 사용합니다.
$ git reset --hard -m1 Aのマージコミット^1
$ git merge Bのマージコミット^2
로 역사를 개작하는 방법에서도 충돌이 발생하지 않고 합병을 다시 적용할 수 있다.이 경우 브랜치 B의 피쳐 브랜치 제출은 A의 히스토리를 결합하지 않고 직접 반영될 수 있습니다.
총결산
git revert
합병을 취소한 후 다시 적용하고 싶은 상황을 고려했다.기릿의 제출 내역은 DAG가 표시하기 때문에 단순하게git merge
재적용할 수 없다.여기 있다git revert
을 지정하는 방법git merge
방법Reference
이 문제에 관하여(Git로 한 번 더 합쳐볼게요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yoichi/articles/git-merge-again텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)