답변:
실제로 다음을 병합하여이 모든 작업을 수행 할 수있는 워크 플로가 있어야합니다.
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (wss)
따라서해야 할 일은 git checkout v2.1
및 git merge wss
입니다. 어떤 이유로 든 실제로 이것을 할 수없고 git rebase 를 사용 하여 wss 브랜치를 올바른 위치로 옮길 수없는 경우 단일 커밋을 어딘가에서 가져 와서 다른 곳에서 적용하는 명령은 git cherry-pick 입니다. 적용하려는 지점을 확인하고 실행하십시오 git cherry-pick <SHA of commit to cherry-pick>
.
rebase가 당신을 구할 수있는 몇 가지 방법 :
당신의 역사가 다음과 같다면 :
- x - x - x (v2) - x - x - x (v2.1)
\
x - x - x (v2-only) - x - x - x (wss)
git rebase --onto v2 v2-only wss
wss를 v2로 직접 이동 하는 데 사용할 수 있습니다 .
- x - x - x (v2) - x - x - x (v2.1)
|\
| x - x - x (v2-only)
\
x - x - x (wss)
그런 다음 병합 할 수 있습니다! 당신은 정말, 정말, 경우 정말 병합 할 수있는 점에 얻을 수 효과적으로 한 번에 여러 체리 픽을 수행하려면, 당신은 여전히 REBASE를 사용할 수 있습니다 :
# wss-starting-point is the SHA1/branch immediately before the first commit to rebase
git branch wss-to-rebase wss
git rebase --onto v2.1 wss-starting-point wss-to-rebase
git checkout v2.1
git merge wss-to-rebase
참고 :이 작업을 수행하기 위해 추가 작업이 필요한 이유는 저장소에 중복 커밋을 생성하기 때문입니다. 이것은 쉬운 일이 아닙니다. 쉬운 분기 및 병합의 요점은 커밋을 한 곳에서 만들고 필요한 곳으로 병합하여 모든 것을 할 수 있다는 것입니다. 중복 커밋은 두 가지 분기를 병합하지 않으려는 의도를 의미합니다 (나중에 결정하려는 경우 충돌이 발생 함).
git-svn-id
참조하기 전에 잘못된 참조 를 제거 dcommit
했습니다. 아마도 체리 픽 단계를 생략하고 리베이스를 사용했습니다.
사용하다
git cherry-pick <commit>
현재 지점 에 적용 <commit>
합니다 .
나는 아마도 내가 선택한 커밋을 교차 확인하고 gitk
대신 커밋 항목을 마우스 오른쪽 버튼으로 클릭하여 선택합니다.
보다 자동으로 (모든 위험을 감수하고) 어제 wss에서 발생한 이후의 모든 커밋을 가정하면 git log
( --pretty
Jefromi 가 제안한) 커밋 목록을 생성 할 수 있습니다
git log --reverse --since=yesterday --pretty=%H
그래서 당신이 사용한다고 가정하는 모든 것 bash
for commit in $(git log --reverse --since=yesterday --pretty=%H);
do
git cherry-pick $commit
done
여기에 문제가 발생하면 (많은 가능성이 있습니다) 이것이 라이브 체크 아웃에서 작동하기 때문에 문제가 발생하므로 수동 체리 픽을 수행하거나 Jefromi가 제안한 rebase를 사용하십시오.
git rebase
내 대답에 사용하는 방법 이 더 강력 하다는 것을 지적하고 싶습니다 . 특히, 이와 같은 for 루프를 사용하면 cherry-picks 중 하나가 실패해도 나머지 모든 작업을 계속 시도합니다. 이것은 ... 매우 좋지 않습니다.
git
답이 답을 얼마나 잘 알고 있는지 확인하기 위해 자식의 복잡성을 통해 구불 구불하지 않고 솔루션에 간단하고 직선적 인 답변.
git cherry-pick
: 기존 커밋이 도입 한 변경 사항을 적용합니다
(X, Y, Z) 커밋 이있는 분기 A 가 있다고 가정합니다 . 이러한 커밋을 분기 B 에 추가해야합니다 . 우리는 cherry-pick
작업 을 사용할 것 입니다.
우리가 사용하는 경우 cherry-pick
, 우리는 브랜치에 커밋을 추가해야합니다 B 커밋이 지점에 표시하는 것과 같은 순으로 .
cherry-pick은 다양한 커밋을 지원하지만 해당 범위에 병합 커밋이 있으면 실제로 복잡해집니다.
git checkout B
git cherry-pick SHA-COMMIT-X
git cherry-pick SHA-COMMIT-Y
git cherry-pick SHA-COMMIT-Z
워크 플로우 예 :
-e 또는 --edit :이 옵션을 사용하면 git cherry-pick을 사용하여 커밋하기 전에 커밋 메시지를 편집 할 수 있습니다.
-n 또는 --no-commit : 일반적으로 명령은 커밋 순서를 자동으로 만듭니다. 이 플래그는 커밋하지 않고 명명 된 각 커밋을 작업 트리 및 인덱스에 체리 픽 픽킹하는 데 필요한 변경 사항을 적용합니다. 또한이 옵션을 사용하면 인덱스가 HEAD 커밋과 일치하지 않아도됩니다. 체리 픽은 인덱스의 시작 상태에 대해 수행됩니다.
흥미로운 이곳까지 기사 와 관련된를 cherry-pick
.