그 상황:
- 마스터는 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