2016-09-21 2 views
0

스테이징에는 dev branch이고 프로덕션에는 master branch입니다. 많은 작업이 준비 단계에서 완료되었으므로 이제 작업을 생산 단계로 이전해야합니다. 프로덕션 환경에서는 아직 릴리스하고 싶지 않지만 이미 마스터 및 병합 요청을 포함하고 있습니다."git pull"하고 특정 커밋을 무시할 수 있습니까?

나도이 중 싶습니다

  1. 가 새로운 지점을하고 커밋 제거 할 준비를 사용하여 마스터 지점까지 생산이 지점을 설정할 준비가 된 것입니다
  2. 가서 git pull 모든 것에 내가 아직 원하지 않는 것들도 찌르다가 내 로컬 레포에게 그 기능이있는 커밋을 "제거"하라.

나는 git revert <commit #>을 시도했지만 아직 준비 중이라는 준비 과정에서 안정성 문제가 발생했습니다.

+0

를이 기능이 이미 dev''에 통합 된 것을 의미합니까 ? –

답변

1

"커밋 (git pull)"하고 특정 커밋을 무시할 수 있습니까?

번호

가 내가 생산에 아직 출시하지 않는 기능이지만 이미 주인에게 끌어 오기 요청에 포함 된 병합되었습니다.

일반적으로 힘내 워크 플로우지도에는 출시 준비가 될 때까지 master에 병합하지 않는 것이 좋습니다. 그 선박이 항해하고 있기 때문에

, 나는이 옵션을 고려할 것입니다 :

  1. 이 진행중인 기능이 master에 남아 있지만, 준비가 될 때까지 생산에 사용할 수 있도록하는 feature toggle를 구현합니다.

  2. 진행중인 기능을 병합하기 전에 새 릴리스 분기를 빌드하기위한 시작 지점으로 새 분기를 만듭니다. 그 이후로 병합 된 기능을 해제하려는 경우 merge 기능이 새 분기로 분기되거나 특정 커밋에서 cherry-pick 중 하나가 될 수 있습니다.

  3. master에서 새 분기를 만들고 revert을 사용하여 진행중인 기능의 일부인 커밋을 푸십시오. 이미 발견 한 것처럼

는 옵션 2와 3은 오히려 지루하고 오류가 발생하기 쉬운 당신이 서로 분리 기능을 유지하는 특히 좋은 일을하지 않았다면이 될 것입니다. 진행중인 기능이 제거 된 별도의 버전의 앱을 준비하는 대신 선택 사항 1로 안내 할 것을 권합니다.

+0

미안하지만 "내가 할 수있어"특정 커밋을 무시할 수 있습니까? " 나는 전체'git pull '을하고 나서 내가 원하지 않는 커플 커밋을 제거하는 것에 대해 생각하고 있었다. 내가 추측 한 것은 되돌리기가하는 일입니다. – dcp3450

1

글쎄, 가능하지만 새 분기를 만드는 것과 유사합니다.

다만, 다음 커밋을 볼 수 git log origin/master를 사용할 수있는 개체를 얻을 수 git fetch을 사용하고 git merge <sha>git cherry-pick <sha> 모두가 당신이 원하는 경우에만 커밋을 사용합니다. 일단이 작업을 시작하면 내역은 origin/master에서 벗어날 것이므로 본질적으로 분기됩니다.


는 병합 단계가 명확하게하려면, 다음의 경우,

A - B - C - D - E - F - G - H - I 

이제 : 리모트 마스터 분기에

A - B - C 

:

가 로컬 마스터 지점에 있다고 가정 원하는 번호 D, E, FH, 실행 :

커밋 크기가 작을수록 커질수록 쉽습니다. 이 결국 당신을 떠날 것이다 : H' 다른이 (다른 SHA-1), 그러나 유사한 내용으로 H에서 커밋이다

A - B - C - D - E - F - H' 

.

물론 문자는 여기에 각각의 sha-1 합을 나타냅니다. 앞에서 설명한대로 git log origin/master으로 식별 할 수 있습니다. 정말에만 git fetch origin; git merge origin/master 않는 git pull 수행

  • (원격 가정 할 origin라고, 그리고 지사는 master입니다) :


    당신은 몇 가지를주의해야한다.

  • 위 예제에서 H '는 다른 커밋입니다 (부모가 다르므로 sha-1 합계가 달라지기 때문에). 체리 피크를 사용하기 시작하면 "대체 타임 라인"을 개발 중입니다.
  • 위의 내용에서 git merge 만 사용하는 경우 (예 : H에 관심이없는 경우), 기록은 변경되지 않고 사용자는 다음을 수행 할 수 있습니다. 직접 (당신의 현지 지점을 빨리 감기) 충돌없이 나중에 G, H, I을 다시 병합 할 수 있습니다.
+0

그래서 나는 'tempMaster'라고 불리는 브랜치를 만들 수 있는데, 당신이 제안한 것을 한 다음, (모든 라인이 백업 될 때) 마스터로 다시 전환 할 것인가? – dcp3450

+0

네, 그게 최선의 방법이라고 생각합니다. 그렇지 않으면 로컬'master' 브랜치를 강요 당하거나 삭제해야합니다. 두 경우 모두이 기능을 곧 사용할 수 있기를 바랍니다. – MayeulC

+0

예, 기능 승인을 기다리는 드문 경우입니다. git merge와 git cherry-pick을 함께 사용하여 원하는 결과를 얻는 방법에 대해 연구 할 것입니다. – dcp3450

관련 문제