다른 브랜치의 특정 커밋에서 브랜치를 만드는 방법
마스터 브랜치에서 여러 커밋을 만든 다음이를 dev 브랜치에 병합했습니다.
마스터 브랜치에서 처음 커밋 된 dev 브랜치의 특정 커밋에서 브랜치를 만들고 싶습니다.
다음 명령을 사용했습니다.
git checkout dev
git branch <branch name> <commit id>
그러나 이것은 내가 예상했던 dev 브랜치가 아닌 마스터 브랜치에서 브랜치를 생성합니다. 커밋 ID는 마스터 브랜치와 개발 브랜치에서 동일합니다. 그렇다면 다른 브랜치에서 동일한 커밋 ID를 어떻게 구별 할 수 있습니까?
추신 : 여기 https://github.com/RolandXu/test_for_branch 에서 github에서 예제를 만들었습니다.
다음 명령을 사용했습니다.
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시 새 분기를 시작합니다
07aeec98
. 이 커밋에는 bb.txt가 없습니다 (github repo에 따라).
방금 체크 아웃 한 위치에서 새 분기를 시작하려면 시작 지점없이 분기를 실행할 수 있습니다.
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 및 dev가 있는데 dev에 병합했습니다. 마스터 커밋 (병합 이전)에서 분기하면 dev의 변경 사항이 제공되지 않습니다.
마스터의 새 변경 사항을 기능 브랜치 에 영구적으로 통합하려면 병합 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>
이를 위해 어떤 브랜치가 체크 아웃되었는지는 중요하지 않습니다. 그것은 당신이 말하는 것을 할 것입니다. (커밋 인수를 생략하면 현재 분기와 동일한 위치에 분기를 만드는 것이 기본값입니다.)
새 브랜치를 생성하면서 체크 아웃하려면 :
git checkout -b <branch> <commit>
commit 인수를 생략하면 동일한 동작이 발생합니다.
너가해야되는:
git branch <branch_name> <commit>
(당신은 브랜치 이름과 커밋을 바꾸고있었습니다)
또는 다음을 수행 할 수 있습니다.
git checkout -b <branch_name> <commit>
대신 지점 이름을 사용하면 지점 끝에서 지점을 얻습니다.
시험
git checkout <commit hash>
git checkout -b new_branch
커밋은 두 개의 개별 분기가 아닌 트리에 한 번만 존재해야합니다.
이를 통해 특정 커밋을 확인하고 원하는 이름을 지정할 수 있습니다.
모든 사람들이
git checkout -b <branch-name> <sha1-of-commit>
또는 github 자체에서이 작업을 수행 할 수 있습니다. 다음 단계를 따르세요.
1- 저장소에서 Commits
.
2- on the commit you want to branch from, click on <>
to browse the repository at this point in the history.
3- Click on the tree: xxxxxx
in the upper left. Just type in a new branch name there click Create branch xxx
as shown below.
Now you can fetch the changes from that branch locally and continue from there.
'code' 카테고리의 다른 글
국가 코드 / 이름의 CSV 목록? (0) | 2020.11.23 |
---|---|
비활성 상태 일 때 DataGrid의 선택된 행 색상 (0) | 2020.11.23 |
앱을 더욱 전문적으로 만드는 특징 / 기능? (0) | 2020.11.22 |
C / C ++ 컴파일러 경고 : 모든 코드를 정리하여 제거하거나 그대로 두십니까? (0) | 2020.11.22 |
array.xml에 색상을 저장하고 Color [] 배열로 되 돌리는 방법 (0) | 2020.11.22 |