programing tip

Git을 사용하여 두 가지 브랜치에 커밋 푸시

itbloger 2020. 12. 12. 10:11
반응형

Git을 사용하여 두 가지 브랜치에 커밋 푸시


두 브랜치에서 커밋을 어떻게 푸시합니까?

나는 "git push"를 사용할 수 없다. 왜냐하면 그것은 3 개의 브랜치로 푸시하기 때문이다. 그리고 나는 그 중 2 개에서 커밋을 원한다 ..

나는 분기 B에서 "git merge HEAD --commit id from branch A--"를 시도했지만 분기 A의 모든 것을 가져와 분기 B와 병합합니다. 마지막 커밋 만 원하고 다른 모든 것은 분기 B와 병합하지 않습니다.

누구나 무엇을 해야할지 알고 있습니까?


짧은 대답

cherry-pick명령을 사용하여 이미 존재하는 커밋을 다른 브랜치에 적용한 다음 git push origin branchA branchB.


두 브랜치에서 커밋을 푸시하는 것이 유용한 이유

다음 구조의 저장소가 있다고 가정합니다.

A--B--C--D  ← master ← HEAD
      \--E  ← v1-release

일부 개발 후 (커밋은 A, B, C) 프로젝트는 풀어 놓이고 v1-release(즉, V1은 버그 수정 지원 할 수 있으며, 다음 버전이 개발 될 수 있도록 분기 만들었습니다 master). Commit E은 버전 정보를 지정하는 데 사용되었습니다 (추가 된 릴리스 정보 등). Commit D은 다음 버전에 예정되어 있으며 v1-release.

이제에서 버그가 발견 v1-release되면 사용자가 v1을 계속 사용할 수 있고 다음 버전에는 나타나지 않도록 두 분기 모두 에서 버그를 수정해야합니다.

에서 버그를 수정 한 후 master저장소는 다음과 같아야합니다.

A--B--C--D--F  ← master ← HEAD
      \--E     ← v1-release

이제 F버그 수정이있는 커밋 v1-release브랜치에 적용해야합니다 .

실제로 수행하는 방법

커밋은 정확히 복사 할 수 없지만 (커밋은 디렉터리에 저장된 상태이므로) 커밋에서 변경 한 내용을 다른 커밋에 적용 할 수 있습니다.

cherry-pick명령이 정확히 수행합니다. 지정된 커밋으로 변경된 사항을 현재 브랜치에 적용하여 새 커밋을 만듭니다.

git checkout v1-release
git cherry-pick F

그 후 저장소는 다음과 같아야합니다.

A--B--C--D--F  ← master
      \--E--G  ← v1-release ← HEAD

Commit GF.

충돌을 해결해야 할 수도 있습니다 (정확히 병합 후).

에러 메시지

이전 체리 선택은 이제 비어있었습니다 ...

체리 선택 커밋으로 변경 한 내용이 이미 현재 분기에 있음을 의미합니다. 올바른 지점을 확인하는 것을 잊었을 것입니다.

오류 또는 충돌이 발생하는 경우을 사용하여 cherry-pick을 중단 할 수 있습니다 git cherry-pick --abort.

마지막으로 master브랜치로 돌아가 두 브랜치를 원격 저장소로 푸시 할 수 있습니다 .

git checkout master
git push origin master v1-release

최종 저장소 구조 :

A--B--C--D--F  ← master ← HEAD
      \--E--G  ← v1-release

이 시도:

git push origin <commitId>:<brancnName_1>
git push origin <commitId>:<brancnName_2>

그것은 내 편에서 작동합니다.

참고 URL : https://stackoverflow.com/questions/4024095/push-a-commit-in-two-branches-with-git

반응형