다른 분기의 특정 커밋에서 분기를 생성하는 방법
저는 마스터 브랜치에서 여러 커밋을 수행한 후 개발 브랜치에 병합했습니다.
마스터 브랜치에서 처음 커밋된 dev 브랜치의 특정 커밋에서 브랜치를 만들고 싶습니다.
다음 명령을 사용했습니다.
git checkout dev
git branch <branch name> <commit id>
그러나 이것은 내가 예상했던 개발 브랜치가 아닌 마스터 브랜치에서 브랜치를 생성합니다.커밋 ID가 마스터 분기와 dev 분기에서 동일합니다.그렇다면 다른 분기에서 동일한 커밋 ID를 어떻게 구별할 수 있을까요?
다음 명령을 사용했습니다.
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
테스트 브랜치에 aa.txt, bb.txt, cc.txt가 포함되어 있을 것으로 예상됩니다.그러나 테스트 분기에는 aa만 포함됩니다.txt 및 cc.txt.마스터 분기에서 분기를 만들었을 가능성이 높습니다.
이 이 형태의 사경우는하용을 한다면,branch
는에 있든 .HEAD
사실은.
수행할 작업:
git checkout dev
git branch test 07aeec983bfc17c25f0b0a7c1d47da8e35df7af8
먼설정다니를 합니다.
HEAD
dev
,는 commit ▁on▁▁new▁a다에 새로운 분기를 시작합니다.
07aeec98
() 커밋에서 BB는 .입니다.github repo 따라이 서에커 txt.
체크아웃한 위치에서 새 분기를 시작하려면 시작점 없이 분기를 실행할 수 있습니다.
git branch test
또는 다른 사용자가 답변했듯이, 한 번의 작업으로 지점 및 체크아웃:
git checkout -b test
제 생각에 당신은 그 사실로 인해 혼란스러울 수도 있습니다.07aeec98
입니다.dev
은 커이밋다조것사다실니입의 입니다.dev
그것의 변화는 최근의 약속에 도달하기 위해 필요합니다.dev
dev
꼭 그고이반역있것아는다닙니은의 에 있는 .07aeec98
.
8480e8ae
(는를 들어 (bb)의 기록에 txt를 추가한 위치)는 예를 들어 의 기록에 없습니다.07aeec98
에서 는경우하에서 하면.07aeec98
에 의해 도입된 변경 사항을 받지 못할 것입니다.8480e8ae
.
즉, 지점 A와 지점 B를 지점 C로 병합한 다음, A의 커밋으로 새 지점을 만들면 B에 도입된 변경 사항을 얻을 수 없습니다.
여기서도 마찬가지로, 당신은 두 개의 병렬 분기 마스터와 개발을 가지고 있었고, 당신은 그것을 개발에 병합했습니다.병합보다 오래된 마스터 커밋에서 분기하는 것은 개발 변경 사항을 제공하지 않습니다.
마스터의 새 변경사항을 피쳐 분기에 영구적으로 통합하려면 병합해야 합니다.master
그들 속으로 들어가서 계속합니다.이렇게 하면 피쳐 분기에 병합 커밋이 생성됩니다.
피쳐 분기를 게시하지 않은 경우 업데이트된 마스터를 기준으로 변경할 수도 있습니다.git rebase master featureA
발생할 수 있는 충돌을 해결할 준비를 합니다.
병합 커밋 없이 피쳐 분기에서 작업할 수 있고 마스터의 새로운 변경 사항과 통합할 수 있는 워크플로우를 원하는 경우 다음을 권장합니다.
- 모든 새 피쳐 분기를 마스터의 커밋을 기반으로 합니다.
- 을 생성합니다.
dev
주인의 약속에 따라 분점. - 피쳐 분기가 마스터의 새 변경사항과 통합되는 방법을 확인해야 할 경우 마스터 및 피쳐 분기를 모두 에 병합합니다.
dev
.
에 커밋하지 않음dev
직접 다른 분기를 병합하는 경우에만 사용합니다.
예를 들어, 기능 A와 B를 작업하는 경우:
a---b---c---d---e---f---g -master
\ \
\ \-x -featureB
\
\-j---k -featureA
분기를 에 병합dev
브랜치를 사용하여 새 마스터와 잘 작동하는지 확인합니다.
a---b---c---d---e---f---g -master
\ \ \
\ \ \--x'---k' -dev
\ \ / /
\ \-x---------- / -featureB
\ /
\-j---k--------------- -featureA
피쳐 분기에서 작업을 계속할 수 있으며 마스터 및 피쳐 분기 모두에서 새로운 변경사항으로 계속 병합할 수 있습니다.dev
정기적으로.
a---b---c---d---e---f---g---h---i----- -master
\ \ \ \
\ \ \--x'---k'---i'---l' -dev
\ \ / / /
\ \-x---------- / / -featureB
\ / /
\-j---k-----------------l------ -featureA
새 기능을 통합할 때가 되면 기능 분기를 병합합니다.dev
!) 마스터로 전환합니다.
인수의 순서가 잘못되었습니다.
git branch <branch-name> <commit>
그리고 이를 위해 체크아웃된 브랜치는 중요하지 않습니다. 사용자가 말한 대로 합니다. (commit 인수를 생략하면 기본적으로 현재 브랜치와 동일한 위치에 브랜치를 만듭니다.)
새 분기를 생성할 때 체크아웃하려면 다음을 수행합니다.
git checkout -b <branch> <commit>
commit 인수를 생략할 경우 동일한 동작을 수행합니다.
모든 사용자가 언급한 대로 로컬에서 이 작업을 수행할 수 있습니다.
git checkout -b <branch-name> <sha1-of-commit>
또는 GitHub 자체에서 다음 단계를 수행할 수 있습니다.
리포지토리에서 을 클릭합니다.
분기할 커밋에서 을 클릭하여 기록의 이 지점에서 리포지토리를 탐색합니다.
왼쪽 위에 있는 을 클릭합니다.거기에 새 지점 이름을 입력하면 됩니다.아래 그림과 같이 클릭합니다.
이제 해당 분기에서 변경 내용을 로컬로 가져와 계속할 수 있습니다.
해라
git checkout <commit hash>
git checkout -b new_branch
커밋은 트리에 한 번만 존재해야 하며, 두 개의 개별 분기에 존재해서는 안 됩니다.
이렇게 하면 특정 커밋을 체크아웃하고 원하는 이름을 지정할 수 있습니다.
다음 작업을 수행해야 합니다.
git branch <branch_name> <commit>
(지점 이름과 커밋을 교환하고 있었습니다.)
또는 다음을 수행할 수 있습니다.
git checkout -b <branch_name> <commit>
지점 이름을 대신 사용하면 지점 팁에서 지점이 나옵니다.
언급URL : https://stackoverflow.com/questions/8483983/how-to-create-the-branch-from-a-specific-commit-in-a-different-branch
'source' 카테고리의 다른 글
MARIA DB 쿼리에서 환경 변수 읽기 (0) | 2023.08.20 |
---|---|
객체의 속성을 찾는 방법은 무엇입니까? (0) | 2023.08.20 |
특정 값의 발생 수를 세는 Python Panda (0) | 2023.08.20 |
CSS 미니머에 대한 추천 사항이 있습니까? (0) | 2023.08.20 |
문서.query선택기 하나의 요소에 여러 개의 데이터 속성이 있습니다. (0) | 2023.08.20 |