2013-07-12 2 views
1

내 워크 플로에서 나는 masterdevelopment의 두 가지 주요 지점이 있습니다. 힘내 rebase 충돌 이해

우리는 우리가 master에 수정을 많이 만들어 우리가 development에 기능의 개발을 계속하기 때문에 masterdevelopment을 리베이스 최근에 결정했다.

우리의 목표는

그래서 우리는 개발의 7개월에 후 정상 약간의 충돌이 있었다 (... 완전히 development을 제거하고 우리의 사용에 적합하지 않기 때문에 우리의 워크 플로우를 변경 한 지부를 유지하기 위해 끝에 differents의 지점)하지만, 일부는 이상한 종료되었습니다 ... 예를 들어

는 많은 시간 우리는 같은 것을했다 :

$ git status 
# On branch master 
# Unmerged paths: 
# (use "git add/rm ..." as appropriate to mark resolution) 
# 
#  added by them:  X 
#  added by us:  Y 

을하지만 added by us를 들어, 파일 master 그리고 난에 존재 n development 커밋합니다. added by us의 정확한 의미는 무엇인가 : 당신은

여기

내 질문은 오래된 .... 문제의 파일을 10 개월 이상 있다고 알고있다?

rebase은 좋은 습관입니까?

+1

공유하지 않은 개인 저장소에서 커밋을 접기를 원할 때. rebase는 좋은 생각입니다. 팀의 다른 구성원이 사용한 커밋을 붕괴시키고 증오심을 나타내려면 리베이스하는 것이 좋습니다. – tjd

답변

6

us은 현재 브랜치를 의미하고 them은 현재 리베이트하고 있다고 가정합니다. 그러나 실제로는 매우 사소한 것입니다.

7 개월 분의 작업을 리베이스하지 않아야합니다!

리베이스는 거의 푸시되지 않은 로컬 코드에서만 사용해야합니다. 다른 용도로 사용하는 경우, 아마도 잘못된 것이 있습니다. 이것은 그 시대의 하나입니다.

기본값 인이 합병됩니다. 리베이스는 특수한 경우입니다. 이 경우 병합해야합니다. 리베이스의 결과는 :

  • 당신은 100 대신 1로 병합 할 한 번 충돌에 대한 관심의 100 배 대신 할
  • 귀하의 역사는 total lie입니다 (REBASE의 모든 단계는 병합)입니다. 나는 모든 rebased 커밋을 철저히 테스트하지 않는다고 가정한다. 그 결과로 나중에 코드가 실제로 작동하거나 심지어 의미가 없을 수도 있습니다. 충돌 해결에 대한 정보도 손실됩니다 (병합을 수행하면 잃어 버리지 않습니다. 두 부모를 비교하여 얻을 수 있습니다).
+1

리베이스 (rebase)는 중요한 브랜치 재 작성의 경우 큰 덩어리의 히스토리에도 유효합니다. –

+0

나는 또한 완전히 유효하다고 생각한다. 일을 더 쉽게하기 위해 rebase 전에 커밋을 "스쿼시 (squash)"할 수있다. 그래서 그것은 "rebase -i commitBeforeBranchCreation"과 같은 것이고, 스쿼시를 모두 수행하고, 필요한 것을 수정 한 다음 "rebase masterBranch"...그런 식으로 갈등은 훨씬 적습니다. – mjsr

관련 문제