code

다른 브랜치의 특정 커밋에서 브랜치를 만드는 방법

codestyles 2020. 11. 23. 08:10
반응형

다른 브랜치의 특정 커밋에서 브랜치를 만드는 방법


마스터 브랜치에서 여러 커밋을 만든 다음이를 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.

commits 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.

create new branch

Now you can fetch the changes from that branch locally and continue from there.

참고URL : https://stackoverflow.com/questions/8483983/how-to-create-the-branch-from-specific-commit-in-different-branch

반응형