이전 git 병합 후 git rebase
다음과 같은 상황이 있습니다.
clone
메인 저장소 (X)에서 (Y)를 만들었습니다. Y에 대해 작업하는 사람들이 많았 기 때문에 우리는 아무것도하지 않고 srebase
만했습니다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
경우 병합 충돌을 피할 수 있습니다 (리베이스 중에) .
자세한 내용은
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
'programing' 카테고리의 다른 글
PHP의 객체에 json_encode 사용 (범위에 관계없이) (0) | 2020.10.28 |
---|---|
position : relative는 빈 공간을 남깁니다. (0) | 2020.10.28 |
Jasmine에서 프로그래밍 방식으로 스파이를 어떻게 제거합니까? (0) | 2020.10.28 |
Elastic Beanstalk의 Linux AMI에서 Tomcat 7 설치 폴더는 어디에서 찾을 수 있습니까? (0) | 2020.10.28 |
sizeof (unsigned double)가 4와 같은 이유는 무엇입니까? (0) | 2020.10.28 |