2013-08-28 1 views
13

좋아요, 그래서 나는 git rerere 명령을 정말 좋아합니다. , 나는 자동으로 그것을 마술로 기록하고 내 갈등을 해결하도록 해주는 것 이외에 다른 많은 것을 실제로 사용하지는 않았다. 그러나, 나는 꽤 큰 rebase (최신 릴리스와 함께 정말로 오래되지 않은 feature 브랜치를 rebase) 동안 내 갈등 해결 중 하나를 엉망으로 만들었다.rebase에서 수행 된 git rerere 해상도를 취소하십시오.

예를 들어 b '에 잘못된 병합이 있습니다 (감사합니다!). 다시 기록하고 싶습니다. 나는 그것을 어떻게 할 것이냐? Rerere Your Boat에 언급 된 git checkout --conflict 옵션을 보았습니다.하지만 어떻게 작동하는지 그리고 여기에 적용되는지는 명확하지 않습니다. 어쩌면이 충돌을 올바르게 해결하면 병합 충돌 상태를 체크 아웃하고 git rerere를 실행해야합니다.

일반적으로 나는 rebase 브랜치의 끝 부분에 커밋을 하겠지만, 버려야합니다. 전 단지 충돌을 처리하기 위해 노력하고 있습니다. 따라서 해당 기능 팀과 동기화 할 때 소요되는 시간을 최소화 할 수 있습니다. 이해가 되니?

+0

, http://stackoverflow.com/a/21635422/2816199에서 @ JánSáreník에 의해 코멘트 엄청난 도움이 될 수 있습니다. – tomekwi

답변

18

rerere에 병합을 위해 기록 된 해상도를 잊어 버리고 병합을 다시 실행하고 rerere에서 기록 된 해상도를 작업 트리에 적용하여 알릴 수 있습니다.

당신은 그래서 당신이하지 않은 것을 알고, 당신은 a'의 커밋 해시를 지정하기 때문에 당신은 아마 분리 된 헤드의 체크 아웃에 있습니다 (그 상황에 다시 얻을 수있는 git merge b을 다음 a'을 확인 할 수 있습니다 가지).

그런 다음 기록 된 충돌 해결을 잊어 버릴 파일을 지정하려면 git rerere forget FILE-WITH-BAD-MERGE을 사용하십시오.

forget <pathspec>

는 rerere가에서 현재 분쟁에 대해 기록하고 충돌 해상도를 재설정합니다. ( the Git documentation for git-rerere에서.)

모든`자식 rerere` 해상도를 잊고 싶어 누구든지
+26

'rm -rf .git/rr-cache' 명령으로 rr 캐시를 완전히 지울 수도 있습니다. –

+4

^^ 이것은'rerere forget'이 나를 위해 해주지 않았을 때 도움이되었습니다 – Dennis

+1

원래 저자는'git checkout --conflict'에 혼란스러워했습니다. 그러나 리베이스의 중간에 있고 처음부터 다시 시작하고 싶지 않다면, 그 옵션은 올바른 방향입니다. 더 친숙한 옵션 인'-m'이 있습니다. 'git checkout -m FILE-WITH-BAD-MERGE'를 사용하여 파일의보다 친숙한 기본 충돌 마커를 복원 할 수 있습니다. 마치 처음부터 rerere의 해상도가 적용되지 않은 것처럼 말입니다. – Bluu