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 G
은 F
.
충돌을 해결해야 할 수도 있습니다 (정확히 병합 후).
에러 메시지
이전 체리 선택은 이제 비어있었습니다 ...
체리 선택 커밋으로 변경 한 내용이 이미 현재 분기에 있음을 의미합니다. 올바른 지점을 확인하는 것을 잊었을 것입니다.
오류 또는 충돌이 발생하는 경우을 사용하여 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
'programing tip' 카테고리의 다른 글
정규식 일치 수 (0) | 2020.12.12 |
---|---|
파이썬에서 즉시 변수 이름 생성 (0) | 2020.12.12 |
Haskell 경량 스레드 오버 헤드 및 멀티 코어에서 사용 (0) | 2020.12.12 |
SQL Server : 여러 행을 하나의 행으로 결합 (0) | 2020.12.12 |
PHP 알림 : 정의되지 않은 오프셋 : 데이터를 읽을 때 배열이있는 1 (0) | 2020.12.11 |