리베이스 후 변경 사항이 손실 되었습니까?
저는 최근에 제가 작업하던 지점을 다시 기반으로했습니다. 나무의 역사는 다음과 같습니다.
1 = 2 = 3 = 4
\
5 = 6 = 7
\
8
내 변경 사항 (다이어그램의 8 번)을 마스터 브랜치 (지금 다이어그램에서 4 번 커밋)로 리베이스하고 싶었습니다. 그래서 다음을 수행했습니다.
git checkout my_branch
git rebase master
<많은 git mergetool / git rebase-건너 뛰어 충돌 해결>
지금 만 실행할 때 :
git checkout my_branch
git diff master
나는 차이가 없습니다. 브랜치를 잃어버린 것은 아니지만 (저장 한 패치에서 변경 사항을 다시 생성 할 수 있음) 내가 한 병합 / 리베이스를 찾을 수 없습니다. 내가 뭘 잘못 했어? 변경 사항이 마스터와 병합 된 상태로 리베이스가 여전히 어딘가에 있습니까? 아니면 다시 수행해야합니까?
차이가 없다면 변경 사항을 잃어버린 것 같습니다. 를 사용 git reflog
하여 리베이스 이전에 존재했던 브랜치를 식별하고을 사용 git reset --hard <my-branch-tip-before-rebase>
하여 원래 브랜치를 되 찾을 수 있습니다. 그리고 예, 프로세스를 다시 실행해야합니다. :-(
나는 당신이 어떻게 똑같이 보이게되었는지 잘 모르겠습니다. 나는 당신이 준 명령으로 다음을 볼 것으로 예상했을 것입니다.
1 = 2 = 3 = 4 (master)
\ \
\ 5' = 6' = 8' (my_branch)
\
5 = 6 = 7
이 경우 아마도 다음을 사용해야합니다 rebase --onto
.
git rebase --onto master <commit id for 6> my_branch
그러면 다음과 같은 그래프가 남았을 것입니다.
1 = 2 = 3 = 4 (master)
\ \
\ 8' (my_branch)
\
5 = 6 = 7
변경 사항을 잃는 한, 특히 거의 동일 해 보이는 두 개의 큰 블록이있는 경우 병합 충돌을 처리하는 데 약간의 연습이 필요합니다. 나는 항상 커밋에 의해 도입 된 실제 차이를보고 그 변화를 알아 내고 적절한 방식으로 이미 브랜치에있는 것과 병합하려고 시도합니다. 나는 당신의 변화가 거기에서 어떻게 손실되었는지 쉽게 볼 수 있습니다.
기억해야 할 한 가지. 병합 충돌이 많이 발생할 것으로 예상하지 않는 경우-소스가 충분히 갈라 졌다고 느끼지 않기 때문에 소스를 보는 것은 잘못된 일을한다는 경고 플래그입니다. 을 수행 git rebase --abort
하고 분기를 조사하고 충돌이 예상되는지 다시 확인 하여 백업하는 것이 좋습니다 . 충돌이 발생한 위치를 기록해 두십시오 (일반적으로 rebase가 명령 줄로 이동하기 직전에 "Applying ..."이 있습니다). 일반적으로 시작하기에 좋은 곳입니다.
때때로 갈등은 피할 수 없으며 해결하기가 지루합니다. 그러나 나는 연습을 통해이 문제에 덜 부딪 힐 것이라고 생각합니다.
브랜치 간 변경 사항 이식에 대한 자세한 내용은 git rebase man 페이지를 참조하십시오. "rebase --onto"를 검색합니다. 첫 번째 히트는 변경 사항을 다른 브랜치로 이식하는 것에 대해 이야기하는 섹션에 도착합니다.
참고 URL : https://stackoverflow.com/questions/13154562/have-i-lost-my-changes-after-rebasing
'code' 카테고리의 다른 글
클래스 이름이있는 동적 클래스 정의 (0) | 2020.11.07 |
---|---|
임의의 문자열이 유효한 파일 이름인지 확인하는 가장 쉬운 방법 (0) | 2020.11.07 |
바이트 벡터 (u8)를 문자열로 어떻게 변환합니까? (0) | 2020.11.07 |
스크립트를 사용하여 특정 작업 디렉토리가있는 Git Bash 창을 어떻게 시작합니까? (0) | 2020.11.07 |
새로 추가하는 방법 (0) | 2020.11.07 |