programing

분기 기준 변경

linuxpc 2023. 5. 21. 11:01
반응형

분기 기준 변경

나는 이런 나무가 있습니다.

(commit 1) - master
                \-- (commit 2) - (commit 3) - demo
                                                \-- (commit 4) - (commit 5) - PRO

그리고 PRO 지점을 마스터로 이동해야 합니다.

(commit 1) - master
                |-- (commit 2) - (commit 3) - demo
                \-- (commit 4) - (commit 5) - PRO

해봤어요.git rebase masterPRO 지점에서 왔지만 아무 일도 일어나지 않습니다.

명확하게 하기 위해:저는 마스터에서 일하다가 제품 데모를 만들어야 했습니다.git checkout -b demo일부 커밋).그런 다음 실수로 데모에서 다른 브랜치를 만듭니다.git checkout -b PRO이제 PRO 지점을 마스터로 이동하고 데모를 그대로 유지해야 합니다.마지막에는 데모와 PRO가 모두 마스터에 매달려 있습니다.

가정하면newBase커밋을 이동할 분기입니다.oldBase지점의 오래된 기반이므로 다음과 같이 사용할 수 있습니다.

git rebase --onto newBase oldBase feature/branch

예를 들어, 다음과 같습니다.

git checkout PRO # Just to be clear which branch to be on.
git rebase --onto master demo PRO

기본적으로, 당신은 그 이후의 모든 커밋을 받아들입니다.demo를 포함하여PRO그리고 그것들을 다시 베이스로.master저지르다.

최대한 일반적이 되도록 노력하겠습니다.먼저 원하는 분기에 있는지 확인합니다.

git checkout current-branch

그런 다음 다음 명령을 사용합니다(여기서).new-base-branch당신이 새로운 기지가 되고 싶은 지점이고,current-base-branch현재 기반이 되는 분기입니다.)

git rebase --onto new-base-branch current-base-branch

충돌이 없으면 좋습니다. 완료되었습니다.만약 그렇다면 (대부분의 경우) 계속 읽어주시기 바랍니다.

충돌이 발생할 수 있으므로 수동으로 해결해야 합니다.Git은 이제 당신의 3방향 병합을 시도합니다.current-branch,current-base-branch그리고.new-base-branch내부적으로 GIT가 작동하는 방식은 대략 다음과 같습니다.

  1. Git은 먼저 기반을 바꿀 것입니다.current-base-branch을 제외하고new-base-branch충돌이 있을 수 있으므로 수동으로 해결해야 합니다.그 일이 끝나면, 당신은 보통 그렇게 합니다.git add .그리고.git rebase --continue새 임시 커밋이 생성됩니다.temp-commit-hash이를 위하여

  2. 이 후, Git는 이제 당신의 기본을 바꿀 것입니다.current-branch에 더하여temp-commit-hash충돌이 더 발생할 수 있으므로 수동으로 해결해야 합니다.작업이 완료되면 다음 작업을 다시 계속합니다.git add .그리고.git rebase --continue그 후에 성공적으로 리바운드했습니다.current-branch맨 위에new-base-branch.


참고: 만약 당신이 실수를 하기 시작한다면, 당신은 할 수 있습니다.git rebase --abort언제든지 기본 재배치 과정 중에 시작 지점으로 돌아갑니다.

체크아웃 대상PRO분기, 이 분기의 가장 오래된 해시(commit4) 및 최신 해시(commit5)를 복사한 후 다른 곳에 붙여 넣습니다.

$ git checkout PRO
$ git log            # see the commit history
# copy the oldest & latest commit-hash 

삭제PRObranch(안전을 위해 백업 보관).새로 만들기 및 체크아웃PRO에서 갈라지다.master:

$ git branch PRO.bac    # create a new branch PRO.bac = PRO as backup

$ git checkout master
$ git branch -D PRO     # delete the local PRO branch
$ git checkout -b PRO   # create and checkout to a new 'PRO' branch from 'master'

이전 커밋의 범위를 취합니다(체리 픽).PRO새로운 분야에 진출하는PRO분기:

$ git cherry-pick commit4^..commit5   # cherry-pick range of commits
# note the '^' after commit4

(- (-f) 푸시를 해서 (-f) 푸시를 합니다.remote PRO▁and▁PRO.bac분기:

$ git log                  # check the commit history

$ git push -f origin HEAD  # replace the remote PRO by local PRO branch history
# git branch -D PRO.bac    # delete local PRO.bac branch

분기를 변경할 필요가 없을 뿐만 아니라 분기를 삭제하고 다시 만드는 것을 방지하는 재설정 및 스테이시를 사용하여 약간 다른 접근 방식을 사용했습니다.

$ git checkout PRO
$ git reset commit4 # This will set PROs HEAD to be at commit 4, and leave the modified commit 5 files in ur working index
$ git stash save -m "Commit message"
$ git reset commit3
$ git stash save -m "Commit message"
$ git reset master --hard
$ git stash pop
$ git stash pop
$ git push --force # force if its already been push remotely

분기를 커밋 단위로 재설정하면 기본적으로 분기가 한 번에 커밋 기록을 다시 감을 수 있습니다.

git branch --set-upstream-to another_branch

언급URL : https://stackoverflow.com/questions/10853935/change-branch-base

반응형