다음과 같은 상황이 발생합니다. 때로는 나무 아래로 작업 한 테스트 파일을 만들었습니다. 나무의 어떤 지점에서 시험은 망가졌지만 나는 그것을 잡지 못했습니다. 그 장소로 가서 그 테스트 파일을 수정하고 그 다음에 새로운 테스트 파일을 사용하여 후속 커밋을 다시 테스트 할 수 있습니다 (git bisect 또는 기타를 사용하여). 어떻게해야합니까? 내 마음 이상적인 대답에 git 트리 내에서 업데이트 된 파일을 소급하여 사용하는 방법
* tuvw1 (master)
|
* oprs2
|
* xyzw3 - testfile broke here and needs to be updated hereon, onwards
|
* mnop4
|
* abcd5 - test file first added
원활 그래서
git bisect
같은 도구를 사용할 수있는 커밋 # 3에 고정 된 테스트 파일, # 2, # 1을 통합 할 수있을 것입니다.
하지만 새로운 시험 점을 찾기 위해 수동으로 조금이라도 (3 번 커밋 사이에 약간의 포인트가 있기 때문에) 새로운 테스트를 통해 # 3 번부터 내 테스트를 마스터 할 수있는 합리적인 대답을 받아 들일 것입니다. 그리고 1 번 내 시험이 다시 깨지는 곳). 내 예제처럼 3 커밋 만 있으면 문제가되지 않을 수도 있지만 내 실제 번호는 깨진 테스트 커밋과 마스터 커밋 사이에 20 커밋과 비슷합니다.
가능한 해결 방법
는 내가 "이상적인"대답은 간단하게 내 파일을 수정, 새로운 마스터의 상부에 커밋하는 것입니다 생각합니다. 그런 다음 내 커밋 # 3에 git rebase
을 사용한 다음 원하는대로 커밋 순서를 변경하십시오. 문제는 당연히 트리의 해당 부분을 다시 쓰고 기존 태그는 새 트리가 아니라 이전 트리에 있습니다. 그 태그를 다시 만들어야합니다. 또한, 내가 push --force
원점에 새 트리, 그것은 다른 개발자에 대한 자식 트리를 망칠 것입니다. 물론 일부 계획 및 의사 소통에서는 해결할 수 있지만 이러한 문제로 인해 가장 좋은 해결책은 아닙니다.
즉, 다양한 테스트 오류를 잡을 필요가 있다면 수동으로 테스트하거나 내 로컬 트리를 테스트해야 할 수도 있습니다. 수동으로 그보다이 다른 더 좋은 방법이 있다면 내가
현재 파손과 수정해야 할 브랜치의 머리말 사이에 모든 커밋이 실제로 필요하다면, 새로운 커밋과 수정을 재정렬하기위한'git rebase -i'가 아마도 이것을 달성하는 가장 쉬운 방법 일 것입니다. 그것은 역사를 다시 쓰는 것이므로 실제로 필요한 것인지와 추가적 골칫거리가 될지를 결정해야합니다. 또 다른 가능성은 마지막에 알려진 지점에서 분기하여 파일을 수정 한 다음 다시 병합하거나 머리에 새 커밋을 삽입하는 것입니다.하지만 그 중 하나라도 중간 커밋을 수정하지는 않습니다. – twalberg
지금 내가 한 일은 3 번 커밋으로 돌아가서 테스트 파일을 변경 한 다음 수동으로 내 자식 "git bisect"유형 테스트를 수행하여 고정 테스트 파일의 변경 사항을 로컬 unstaged git 공간에서 변경하고 'git checkout'을 사용합니다. 3과 1 사이의 커밋에 대해. 그럼 나는 고정 테스트 파일을 마스터의 맨 위에 커밋을 추가하고 내 인생과 함께 이동 :) 그래서 문제가 지금 나를 위해 해결 ... – Dennis