program story

브랜치에서 모든 커밋을 가져오고 지정된 커밋을 다른 커밋으로 푸시

inputbox 2020. 8. 31. 07:45
반응형

브랜치에서 모든 커밋을 가져오고 지정된 커밋을 다른 커밋으로 푸시


다음 분기가 있습니다.

  • master
  • production

및 다음 원격 분기 :

  • origin/master
  • origin/production

origin/master분기를 가져오고 마지막 가져 오기 ( log -p master..origin/master) 에서 변경된 내용의 차이 를 가져 오는 스크립트가 있습니다. 그런 다음 병합 origin/master합니다.

발견 된 커밋은 코드 검토 도구로 푸시됩니다.

성공한 커밋을 프로덕션 브랜치로 푸시 한 다음 origin/production.

어떻게 할 수 있습니까?

또한 2 개의 스크립트가 실행 중입니다. 하나는에서 가져오고 origin/master, 데이터베이스에 커밋 세부 정보를 푸시하고, 병합하고, 다른 하나는 성공적인 커밋을 푸시해야하는 현재 작성 중인 스크립트 입니다.

경쟁 조건 / 병합 충돌을 피하면서 두 스크립트를 실행하고 싶습니다. 지정된 커밋으로 만 작업하고 싶기 때문에 원하지 않는 커밋을 제거하는 방법이 있을까요?


제가 찾고있는 용어는 '체리 픽'입니다. 즉, 한 분기 중간에서 단일 커밋을 가져 와서 다른 분기에 추가합니다.

A-----B------C
 \
  \
   D

된다

A-----B------C
 \
  \
   D-----C'

물론 이것은 git cherry-pick 명령으로 수행 할 수 있습니다.

이 커밋의 문제는 git이 커밋이 모든 기록을 포함하는 것으로 간주한다는 것입니다. 따라서 다음과 같은 세 개의 커밋이있는 경우 :

A-----B-----C

그리고 B를 제거하려고하면 다음과 같이 완전히 새로운 커밋을 만들어야합니다.

A-----------C'

C '는 다른 SHA-1 ID를 가지고 있습니다. 마찬가지로 체리가 한 브랜치에서 다른 브랜치로 커밋을 선택하는 것은 기본적으로 패치를 생성 한 다음 적용하는 것과 관련이 있으므로 그런 방식으로 히스토리도 손실됩니다.

이 커밋 ID 변경은 다른 것들 중에서 git의 병합 기능을 중단합니다 (아주 드물게 사용되는 경우이를 해결하는 휴리스틱이 있습니다). 하지만 더 중요한 것은 기능적 종속성을 무시한다는 것입니다. C가 실제로 B에 정의 된 함수를 사용했다면 절대 알 수 없습니다.

아마도 이것을 처리하는 더 좋은 방법은 더 미세한 나뭇 가지를 가지는 것입니다. 즉, '마스터'를 갖는 대신 'featureA', 'bugfixB'등을 갖습니다. 한 번에 전체 브랜치에 대한 코드 검토를 수행합니다. 각 브랜치는 한 가지 작업에만 집중하는 것입니다. 완료되면 한 지점. 이것이 git이 설계 한 워크 플로이며 장점입니다. :)

패치 수준에서 작업을 고집한다면 darcs를 살펴볼 수 있습니다. 리포지토리를 패치 집합으로 간주하므로 체리 피킹이 기본 작업이됩니다. 그러나 이것은 매우 느린 것과 같은 자체 문제가 있습니다. :)

편집 : 또한 두 스크립트에 대한 두 번째 질문을 이해하지 못합니다. 좀 더 자세하게 설명 할 수있을 것입니다. 혼란스럽지 않도록 별도의 질문으로 설명 할 수 있습니까?


나는 이것이 오래된 질문이라는 것을 알고 있지만 여기에서 참조됩니다 : Git에서 특정 커밋을 병합하는 방법

따라서 새로운 답변 : 기능 분기 및 풀 요청을 사용하십시오.

fA는 기능 A가있는 커밋이고 fB는 기능 B가있는 커밋입니다.

            fA   fC (bad commit, don't merge)
           /  \ /
master ----A----B----C
                \  /
                 fB

Pull requests are associated with GitHub's functionality, but really all I mean is that someone has the responsibility of merging the feature branches into master.

참고URL : https://stackoverflow.com/questions/880957/pull-all-commits-from-a-branch-push-specified-commits-to-another

반응형