programing

이전 git 병합 후 git rebase

nasanasas 2020. 10. 28. 08:10
반응형

이전 git 병합 후 git rebase


다음과 같은 상황이 있습니다.

  • clone메인 저장소 (X)에서 (Y)를 만들었습니다. Y에 대해 작업하는 사람들이 많았 기 때문에 우리는 아무것도하지 않고 s rebase만했습니다 merge. ( push) Y를 X 에 전달하고 싶을 때 우리 rebase는 물건을 멋지고 깨끗하게하기 위해 a를 하고 싶습니다.

문제는이 작업을 수행 rebase이전 merge단계 에서 이미 수행 한 모든 병합을 수행하라는 요청을 받는다는 것입니다 . 실제로 병합을 다시 수행하는 것 외에 이에 대한 해결책이 있습니까?

충돌하는 병합을 이미 해결했기 때문에 매우 간단 할 것으로 예상했습니다.


"깨끗한"기록을 얻기위한 리베이스는 과대 평가됩니다. 기록을 보존하려는 경우 가장 좋은 방법은 리베이스 대신 병합을 수행하는 것입니다. 이렇게하면 개정판으로 돌아 가야 하는 경우 개발 중에 테스트 한 개정판과 정확히 동일합니다. 또한 이전에 해결 된 병합 충돌에 대한 문제도 해결됩니다.

히스토리 보존에 신경 쓰지 않는다면 master에서 새 분기를 만들고 확인한 다음 a git read-tree -u -m dev수행 하여 dev분기 와 일치하도록 작업 트리를 업데이트 할 수 있습니다 . 그런 다음 모든 것을 하나의 큰 커밋으로 커밋하고 정상적으로 마스터로 병합 할 수 있습니다.


git merge --squash이제는 많은 양의 작업과 많은 병합 후 선호하는 리베이스 방법입니다 ( 이 답변 참조 ). 작업중인 브랜치가 호출 my-branch되고 리베이스 master하려면 다음을 수행하십시오.

git checkout my-branch
git branch -m my-branch-old
git checkout master
git checkout -b my-branch
git merge --squash my-branch-old
git commit

두 가지 말 :

  • 새로 가져온 커밋 위에 원하는만큼 자신의 (아직 푸시되지 않은) 작업을 리베이스 할 수 있습니다.
  • 이러한 종류의 상황에 대해 수행되는 활성화 한git rerere 경우 병합 충돌을 피할 수 있습니다 (리베이스 중에) .
    http://git-scm.com/images/rerere2.png자세한 내용은 git rerere.

다음을 사용하여 브랜치의 모든 변경 사항을 새 커밋에 넣을 수 있습니다 master.

git diff master > my_branch.patch
git checkout master
patch -p1 < my_branch.patch

그런 다음 파일을 준비하고 커밋합니다.


병합 충돌 재생과 관련하여 git rerere를 사용하여 병합 충돌이 이미 해결 된 방법에 대한 데이터베이스를 유지 관리 할 수 ​​있으므로 동일한 충돌이 발생하는 리베이스를 수행하면 힘든 부분이 자동으로 수행됩니다.

https://hackernoon.com/fix-conflicts-only-once-with-git-rerere-7d116b2cec67

git config --global rerere.enabled true

주의해야 할 점은 잘못 해결 하면 다음 번에도 자동으로 지루해지며 실제로 깨닫지 못할 수도 있다는 것입니다.

더 많은 공식 문서 : https://git-scm.com/docs/git-rerere

참고 URL : https://stackoverflow.com/questions/6248231/git-rebase-after-previous-git-merge

반응형