programing

단일 Git 커밋 기본 재배치

topblog 2023. 8. 31. 23:34
반응형

단일 Git 커밋 기본 재배치

분기에서 다른 분기로 단일 커밋을 재배치하는 방법이 있습니까?

분기 구조는 다음과 같습니다.

-- -- -- -- -- (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 commit) 사이의 커밋 범위를 다시 기준으로 합니다."라고 말합니다.

이 작업 이후branch팁이 커밋 시 이동XX그래서 당신은 그것을 되돌리고 싶습니다.

git checkout branch
git reset --hard branch@{1}^

즉, "지점 팁을 이전 상태 이전의 커밋으로 재설정"합니다.

체리 픽이 더 간단한 해결책입니다

실제로 하는 것은 꽤 간단합니다.해결책은 대화형 기본 재배치를 수행하고 기본 재배치에 포함하지 않을 모든 커밋을 "삭제"하는 것입니다.

git rebase -i <target_branch>어디에target_branch기준을 변경할 분기입니다.

그런 다음 열려 있는 파일을 편집하고pick당신이 원하는 커밋과drop(또는)d간단히 말해) 가지고 오고 싶지 않은 모든 커밋.

@찰스 응답이 정확합니다.어쨌든 나는 이것을 너무 많이 사용하게 되었고, 무엇보다도 프로젝트의 특정 구성을 다시 기반으로 삼기 위해

a8f9182 (HEAD -> 생산) 생산 구성* daa18b7(사전) 사전 생산 구성|/* d365f5f(로컬) 로컬 구성|/27d2835 (dev) 세상을 구할 놀라운 새로운 기능| 56d2467 (마스터) 프로젝트를 위한 지루한 최신 기술|/

새 명령을 생성합니다.

cat ~/bin/git-rebase 샷커밋 = $1DEST=${2:-HEAD}gitrebase ${COMM}IT}^ ${COMMIT} -- $DEST로

일반적으로 해당 명령에 대한 분기 이름을 자동으로 완성하려면 이 함수의 소스를 추가합니다(.svrc 또는 .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) 새로운 기능|

이것이 이불을 좋아하는 사람들이 좋아하는 일인 것 같습니다.

이 명령은 제공하는 share/ref에 상관없이 작동합니다.

$ git rebaseshot <Feature branch> master
$ git rebaseshot <commit of XX> master

언급URL : https://stackoverflow.com/questions/14635672/rebase-a-single-git-commit

반응형