2010-01-19 1 views
2

내 평소 워크 플로우 git bisect 세션을 시작이다 :작업 트리를 양분하기 전에 특정 커밋으로 바꾸는 가장 좋은 방법은 무엇입니까?

git bisect start   # start a bisect session 
git bisect bad   # I noticed that the current state is broken 

이제 자주 일들이 과거에 일한 것을 알고,하지만 난 좋았다 버전을 아직 모르는, 그래서 나는 보통 내를 되돌리려 작업 트리를 이전 상태로 만들고, 테스트하고, 반복합니다. git bisect good으로 표시 할 수있는 작업 버전을 찾을 때까지 반복하십시오.

"내 작업 트리를 이전 상태로 되돌리기"단계를 수행하는 가장 좋은 방법은 무엇입니까? git reset --hard <some_good_rev>? git checkout <some_good_rev>? 다른 것? 답을 정당화하십시오.

답변

8

나는 보통 좋은 레브가 어디 있는지 모른다. 그래서 나는 그것을 찾아야한다. 얼마나 멀리까지 돌아갈 지 짐작하십시오. 32 회전 속도계라고합시다. 지점의 끝에서 깨끗한 작업 디렉토리로 시작 :

$ git checkout HEAD~32 

테스트를 실행합니다. 그것이 좋은 레브라면, 양분을 시작하십시오. 그렇지 않은 경우 더 돌아가십시오.

$ git checkout HEAD~32 

헹굼, 거품 반복.

왜 "git checkout?" "git reset"은 분기가 "tip"으로 가리키는 것을 변경하지만 git checkout은 변경되지 않기 때문에 변경됩니다.

+0

아, "~ n"표기법은 좋은 속임수입니다. 나는 그것이 '분리 된 머리'를주기 때문에 '계산'이 효과가 있는지 궁금해. 나는 bisect가 좋아한다는 것을 확신하지 못했지만 분명히 그렇습니다. 건배! –

1

기능이 작동하는 모든 버전 (기능을 도입 한 커밋)을 모르는 경우 bisect의 이점을 많이 잃어 버리는 것처럼 보입니다. 기능이 작동하는 곳에서 적어도 하나의 커밋이 있다는 것을 알고 있다면 기능이 작동하는 가장 최근의 커밋 일 필요는 없지만 그 기능이 좋은 것으로 플래그를 지정하십시오. 그렇지 않으면 기본적으로 자신을 양분합니다.

+0

부정확성에 대해 사과드립니다. 나는 과거 버전이 작동했다는 것을 내가 알기를 의미한다 - 나는 단지 * *을 모른다. 나는 이제 내 질문에 덧붙였다. –

+0

@FrerichRaabe : jamessan의 요점은 여전히 ​​유효합니다. 해당 기능이 작동하는 * 커밋을 모르는 경우에는 'bisect'를 사용할 수 없습니다. 일반적으로 적어도 기능을 도입 한 커밋은 "좋은"커밋이어야합니다. 결국 커밋하기 전에 기능을 테스트 했습니까? – sleske

+0

@sleske : 이것은 수십 명의 개발자가 참여하는 대규모 프로젝트이며, 모든 개발자가 모든 가능한 플랫폼을 테스트 할 것으로 기대하는 것은 현실적이지 않습니다.이 프로젝트는 다양한 운영 체제에서 이식 가능합니다. 아아, 자동 테스트 스위트는 * 가능한 모든 문제를 파악하지 못합니다. 기능을 구현하는 커밋이없는 경우가 많습니다 (일반적으로 마스터 맨 위에 리베이스 된 일련의 커밋입니다. 병합하지 않음). –

관련 문제