특정 커밋을 git의 다른 브랜치를 기반으로 옮기는 방법은 무엇입니까? quickfix2는 X

그 상황:

  • 마스터는 X에있다
  • quickfix1은 X + 2 커밋에 있습니다

그런 :

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

그런 다음 quickfix2 작업을 시작했지만 실수로 quickfix1을 마스터가 아닌 복사 할 소스 분기로 사용했습니다. 이제 quickfix2는 X + 2 커밋 + 2 관련 커밋에 있습니다.

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

이제 quickfix2가있는 분기를 원하지만 quickfix1에 속하는 2 개의 커밋이 없습니다.

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

quickfix2의 특정 버전에서 패치를 만들려고했지만 패치가 커밋 기록을 유지하지 않습니다. 커밋 히스토리를 저장하는 방법이 있지만 quickfix1을 변경하지 않고 분기가 있습니까?



답변

이것은 고전적인 경우입니다 rebase --onto.

 # 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 config --global rebase.autostash true .


답변

git cherry-pick복사하려는 커밋을 선택하는 데 사용할 수 있습니다 .

아마도 가장 좋은 방법은 마스터에서 분기를 만든 다음 해당 분기 git cherry-pick에서 원하는 quickfix2의 커밋을 사용하는 것입니다.


답변

당신이 할 수있는 가장 간단한 것은 체리 따기 범위입니다. 그것은 동일 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]

설명과 함께 더 유용한 다른 명령들 : Git Guide