다른 분기의 특정 커밋에서 분기를 생성하는 방법
저는 마스터 브랜치에서 여러 커밋을 수행한 후 개발 브랜치에 병합했습니다.
마스터 브랜치에서 처음 커밋된 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
먼설정다니를 합니다.
HEADdev,는 commit ▁on▁▁new▁a다에 새로운 분기를 시작합니다.
07aeec98() 커밋에서 BB는 .입니다.github repo 따라이 서에커 txt.
체크아웃한 위치에서 새 분기를 시작하려면 시작점 없이 분기를 실행할 수 있습니다.
git branch test
또는 다른 사용자가 답변했듯이, 한 번의 작업으로 지점 및 체크아웃:
git checkout -b test
제 생각에 당신은 그 사실로 인해 혼란스러울 수도 있습니다.07aeec98입니다.dev은 커이밋다조것사다실니입의 입니다.dev그것의 변화는 최근의 약속에 도달하기 위해 필요합니다.devdev꼭 그고이반역있것아는다닙니은의 에 있는 .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 |

