문제

내 주인으로부터 두 개의 지점이 있습니다.

  • v2.1: (버전 2) 나는 몇 달 동안 일해 왔습니다.
  • WSS: 어제 마스터 (제작)에 특정 기능을 추가하기 위해 만들었습니다.

어제 커밋을 WSS에서 v2.1로 복사하는 방법이 있습니까?

도움이 되었습니까?

해결책

합병 하여이 모든 작업을 수행 할 수있는 워크 플로가 있어야합니다.

- 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 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 cherry-pick : 기존 커밋이 도입 한 변경 사항을 적용하십시오

우리에게 지점이 있다고 가정합니다 (x, y, z)가 커밋합니다. 우리는이 커밋을 분기에 추가해야합니다 . 우리는 그것을 사용할 것입니다 cherry-pick 운영.

우리가 사용할 때 cherry-pick, 우리는 지점에 커밋을 추가해야합니다 커밋이 지점에 나타나는 것과 같은 시간 순서로 .

Cherry-Pick은 다양한 커밋을 지원하지만 해당 범위에서 Commit Mets가 있으면 정말로 복잡해집니다.

git checkout B
git cherry-pick SHA-COMMIT-X
git cherry-pick SHA-COMMIT-Y
git cherry-pick SHA-COMMIT-Z

워크 플로의 예 :

enter image description here

우리는 사용할 수 있습니다 cherry-pick ~와 함께 옵션

-e 또는 --Edit :이 옵션을 사용하면 Git Cherry-Pick을 사용하면 커밋 전에 커밋 메시지를 편집 할 수 있습니다.

-n 또는-no-commit : 일반적으로 명령은 자동으로 커밋 시퀀스를 만듭니다. 이 깃발은 커밋하지 않고 작업 트리와 색인에 커밋 한 각각의 체리를 cherry- 픽에 적용합니다. 또한이 옵션을 사용하면 인덱스가 헤드 커밋과 일치하지 않아도됩니다. 체리 픽은 색인의 시작 상태에 대해 수행됩니다.

여기서 흥미로운 기사 ...에 관하여 cherry-pick.

당신은 할 수 있습니다 패치를 만듭니다 당신이 복사하고 싶은 커밋에서 패치를 적용하십시오 목적지 지점에.

또는 당신이 전도자의쪽에 약간 적다면 당신은 내가 사용하는 약간 추악한 방식을 할 수 있습니다. deploy_template에는 지점 배포로 마스터에 복사하고 싶은 커밋이 있습니다.

git branch deploy deploy_template
git checkout deploy
git rebase master

이렇게하면 deploy_template에서 새 브랜치 배포 (-f를 사용하여 기존 배포 분기를 덮어 쓸 수 있습니다)를 만들고이 새 분기를 마스터로 다시 비제하고 deploy_template을 손길이 닿지 않습니다.

Branch WSS에서 v2.1로 마지막 커밋을 복사하는 간단한 사례의 경우, Commit ID를 간단히 잡을 수 있습니다 (git log --oneline | head -n 1) 그리고 할 :

git checkout v2.1
git merge <commit>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top