IT

특정 커밋을 다른 분기 git에 기반하도록 이동하는 방법은 무엇입니까?

itgroup 2023. 5. 28. 20:35
반응형

특정 커밋을 다른 분기 git에 기반하도록 이동하는 방법은 무엇입니까?

상황:

  • 마스터가 X에 있음
  • Quickfix1은 X + 2 커밋입니다.

다음과 같은 경우:

o-o-X (master HEAD)
     \
      q1a--q1b (quickfix1 HEAD)

그 후 저는 퀵픽스2 작업을 시작했는데 실수로 퀵픽스1을 마스터가 아닌 복사할 소스 브랜치로 가져갔습니다.이제 Quickfix2는 X + 2 커밋 + 2 관련 커밋입니다.

o-o-X (master HEAD)
     \
      q1a--q1b (quickfix1 HEAD)
              \
               q2a--q2b (quickfix2 HEAD)

이제 저는 퀵픽스1에 속하는 2개의 커밋 없이 퀵픽스2를 가진 브랜치를 원합니다.

      q2a'--q2b' (quickfix2 HEAD)
     /
o-o-X (master HEAD)
     \ 
      q1a--q1b (quickfix1 HEAD)

저는 퀵픽스2의 특정 리비전에서 패치를 생성하려고 했지만, 패치가 커밋 기록을 보존하지 않습니다.내 커밋 기록을 저장하지만, 빠른 수정 1에 변경 사항이 없는 분기를 가질 수 있는 방법이 있습니까?

이는 다음과 같은 전형적인 사례입니다.

 # let's go to current master (X, where quickfix2 should begin)
 git checkout master

 # replay every commit *after* quickfix1 up to quickfix2 HEAD.
 git rebase --onto master quickfix1 quickfix2 

그래서 당신은 가야 합니다.

o-o-X (master HEAD)
     \ 
      q1a--q1b (quickfix1 HEAD)
              \
               q2a--q2b (quickfix2 HEAD)

대상:

      q2a'--q2b' (new quickfix2 HEAD)
     /
o-o-X (master HEAD)
     \ 
      q1a--q1b (quickfix1 HEAD)

이 작업은 깨끗한 작업 트리에서 수행하는 것이 가장 좋습니다.
참고: 특히 Git 2.10 이후.

사용할 수 있습니다.git cherry-pick복사할 커밋을 선택하기만 하면 됩니다.

가장 좋은 방법은 마스터에서 분기를 만든 다음 해당 분기를 사용하는 것입니다.git cherry-pick당신이 원하는 퀵픽스2의 커밋 2개에.

여러분이 할 수 있는 가장 간단한 것은 체리를 따는 것입니다.그것은 그것과 같은 일을 합니다.rebase --onto하지만 눈에는 더 쉽습니다 :)

git cherry-pick quickfix1..quickfix2

제 생각엔 다음과 같습니다.

git checkout master
git checkout -b good_quickfix2
git cherry-pick quickfix2^
git cherry-pick quickfix2
// on your branch that holds the commit you want to pass
$ git log
// copy the commit hash found
$ git checkout [branch that will copy the commit]
$ git reset --hard [hash of the commit you want to copy from the other branch]
// remove the [brackets]

여기에 설명이 포함된 다른 유용한 명령:깃 가이드

언급URL : https://stackoverflow.com/questions/2369426/how-to-move-certain-commits-to-be-based-on-another-branch-in-git

반응형