분기에서 다른 분기로 단일 커밋을 리베이스하는 방법이 있습니까?
이 분기 구조가 있습니다.
-- -- -- -- -- (Master)
\
-- -- -- -- -- XX (Feature-branch)
내가 원하는 것은 마지막 커밋 Feature-branch
을 마스터 로 리베이스하고 Feature-branch
하나의 커밋을 롤백하는 것입니다.
-- -- -- -- -- XX (Master)
\
-- -- -- -- -- (Feature-branch)
어떻게하나요?
답변
XX를 체리로 골라 마스터 할 수 있습니다.
git checkout master
git cherry-pick <commit ID of XX>
그리고 git reset을 사용하여 기능 분기에서 마지막 커밋을 제거하십시오.
git checkout Feature-branch
git reset --hard HEAD^
답변
git rebase --onto master branch~1 branch
이것은 “마스터 브랜치의 끝에서 마지막 이전 브랜치와 브랜치 (즉, XX 커밋) 사이의 커밋 범위를 리베이스”한다고 말합니다.
이 작업 branch
팁이 commit으로 이동 한 후 XX
다시 설정하고 싶습니다.
git checkout branch
git reset --hard branch@{1}^
“이전 상태 이전의 커밋으로 분기 팁을 재설정”이라고 말합니다.
따라서 체리 선택은 더 간단한 해결책입니다 …
답변
실제로하는 것은 매우 간단합니다. 해결책은 대화 형 리베이스를 수행하고 리베이스에 포함하지 않으려는 모든 커밋을 “삭제”하는 것입니다.
git rebase -i <target_branch>
target_branch
리베이스하려는 지점은 어디에 있습니까?
그럼 당신은 열린 파일 편집합니다 pick
당신이 원하는 않는 커밋 및 drop
(또는 d
당신이 함께 가지고 싶지 않아 짧은에 대한) 모든 커밋.
답변
@Charles 응답이 정확합니다. 어쨌든 나는 이것을 여러 번 사용하여 결국 프로젝트의 특정 구성을 다시 작성했습니다.
* a8f9182 (HEAD-> 생산) 생산 구성 | * daa18b7 (사전) 사전 제작 구성 | / | * d365f5f (로컬) 로컬 구성 | / * 27d2835 (dev) 세상을 구할 놀라운 새로운 기능 * | 56d2467 (마스터) 프로젝트를위한 지루한 상태 | /
이에 대한 새 명령을 만듭니다.
$ 고양이 ~ / bin / git-rebaseshot 커밋 = $ 1 DEST = $ {2 : -HEAD} git rebase $ {COMMIT} ^ $ {COMMIT}-$ DEST에
일반적으로 해당 명령에 대한 브랜치 이름을 자동 완성하고 싶으므로이 함수를 소싱하여 추가합니다 (.bashrc 또는 .profile에 추가).
_git_rebaseshot () { __gitcomp_nl "$ (__ git_refs)" }
git autocomplete가 검색합니다.
이 명령을 다음과 같이 사용할 수 있습니다.
# rebase config on prepro on actual HEAD
$ git rebaseshot prepro
# rebase config on local onto dev
$ git rebaseshot local dev
# rebase production config on master
$ git rebaseshot pro master
기능을 올바르게 나누면 가능성은 무한합니다.
* a8f9182 (HEAD-> postgres) BBDD 구성 * a8f9182 (로컬) 로컬 구성 * a8f9182 (디버그) 로그 수준 구성 * a8f9182 (dev) 새로운 기능 |
나는 이것이 사람들 이 퀼트를 좋아하는 것 같아요 .
이 명령은 어떤 sha / ref를 제공하든 상관없이 작동합니다.
$ git rebaseshot <Feature branch> master
$ git rebaseshot <commit of XX> master
답변
다른 옵션이 있습니다.
- 기능 브랜치의 사본이있는 리모컨이 있는지 확인하십시오.
- 로컬 기능 분기 삭제
- 방금 마스터에서 삭제 한 이전 기능 브랜치와 동일한 이름으로 새 브랜치를 만들고 체크 아웃합니다.
- 원하는 기능 브랜치의 원격 사본에서 하나의 커밋을 선택합니다.
명령은 다음과 같습니다.
git checkout Feature-branch
git push -u origin HEAD
git checkout master
git branch -D Feature-branch
git checkout -b Feature-branch
git cherry-pick HASH-OF-XX
리베이스 명령은 아니지만 정신적으로 리베이스입니다.