지점 기반 변경
다음과 같은 나무가 있습니다.
(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 master
PRO 브랜치를 시도 했지만 아무 일도 일어나지 않습니다.
명확히하기 위해 : 저는 마스터에서 일하고 있었고 제품 데모 ( git checkout -b demo
및 일부 커밋) 를 만들어야했습니다 . 그런 다음 실수로 데모 ( git checkout -b PRO
및 일부 커밋) 에서 다른 분기를 생성 하고 이제 PRO 분기를 마스터로 이동하고 데모를 그대로 두어야합니다. 마지막에 데모와 PRO 모두 마스터에서 중단됩니다.
--onto
그것을 위해 사용 :
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
.
PRO
브랜치로 체크 아웃하고 , 이 브랜치의 가장 오래된 ( commit4 ) 및 최신 ( commit5 ) 커밋 해시를 복사하고 다른 곳에 붙여 넣습니다.
$ git checkout PRO
$ git log # see the commit history
# copy the oldest & latest commit-hash
그런 다음 PRO
분기를 삭제하십시오 (안전을 위해 백업을 보관하십시오). 에서 새 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'
이전 분기 의 커밋 범위 를 새 분기 로 가져옵니다 ( cherry-pick ) .PRO
PRO
$ git cherry-pick commit4^..commit5 # cherry-pick range of commits
# note the '^' after commit4
이제 모든 것이 정상이면 강제로 (-f) remote PRO
분기로 푸시하고 로컬 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 current-branch
그런 다음 다음 명령을 사용하십시오 (여기서는 new-base-branch
새 기지 current-base-branch
가 될 지점이고 현재 기지 인 지점입니다.)
git rebase --onto new-base-branch current-base-branch
갈등이 없다면 훌륭합니다. 그렇게한다면 (대부분의 경우) 계속 읽으십시오.
충돌이 발생할 수 있으며 수동으로 해결해야합니다. Git은 이제 current-branch
, current-base-branch
및 new-base-branch
. 대략 이것은 git이 내부적으로 작동하는 방법입니다.
힘내 먼저를 리베이스됩니다
current-base-branch
의 상단에new-base-branch
. 충돌이있을 수 있습니다. 수동으로 해결해야합니다. 그 후에 일반적으로git add .
및git rebase --continue
. 이를 위해 새로운 임시 커밋temp-commit-hash
을 생성합니다 .이 후, 힘내 이제 리베이스됩니다
current-branch
의에 정상을temp-commit-hash
. 추가 충돌이있을 수 있으며 다시 수동으로 해결해야합니다. 완료되면git add .
및을 (를git rebase --continue
) 다시 계속current-branch
합니다new-base-branch
. 그 후 .
참고 : 엉망이되기 시작 git rebase --abort
하면 리베이스 프로세스 중에 언제든지 수행 하고 시작 지점으로 돌아갈 수 있습니다.
분기를 삭제하고 다시 만들지 않고 분기를 전환 할 필요가 없도록 재설정 및 숨김을 사용하는 약간 다른 접근 방식을 사용했습니다.
$ 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 commit 3
$ 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
커밋 기준으로 커밋에 대한 분기를 재설정하면 기본적으로 해당 분기 기록을 한 번에 커밋으로 되감습니다.
참고 URL : https://stackoverflow.com/questions/10853935/change-branch-base
'program tip' 카테고리의 다른 글
SpringData JPA에는 메서드 이름 확인을 사용하여 엔터티를 계산하는 방법이 있습니까? (0) | 2020.08.09 |
---|---|
다른 사람에게 서비스로 이메일을 보낼 때 Reply-To 헤더를 사용해야합니까? (0) | 2020.08.09 |
인터페이스와 클래스의 차이점은 무엇이며 클래스에서 직접 메서드를 구현할 수 있는데 인터페이스를 사용해야하는 이유는 무엇입니까? (0) | 2020.08.09 |
동시에 배열 매핑 및 필터링 (0) | 2020.08.09 |
pip로 설치 한 후 "jupyter : 명령을 찾을 수 없음" (0) | 2020.08.09 |