2015-01-02 10 views
1

go fmt 또는 indent과 같은 소스 코드 서식 도구를 사용하여 Git 지점 X에서 모든 커밋을 다시 작성/리베이스하려고합니다.도구를 실행하는 동안 Git에서 브랜치를 리베이스하면 모든 커밋을 개별적으로 커밋 할 수 있습니까?

나는 대략 X에 커밋에 이르기 $_으로 다음 master 떨어져 새로운 지점을 만들고 반복 구성에 워크 플로우 기대 : 어쩌면

git cherry-pick $_ 
go fmt ... 
git commit -a --amend 

심지어

git cherry-pick -n $_ 
go fmt ... 
git cherry-pick --continue 

을 그래도 -n--continue을 같이 연주하지는 않습니다. 또한 수행 할 때 Xgo diff X new에 자연스럽게 go fmt 커밋을 수행해야합니다.

그러나, go fmt 힘내는 날짜를 저지 변경, 망할 놈의 패치를 혼동 커밋 원본에서 변경되지 않은 파일을 변경하기 위해 추구 -a 같은이 절차를 잘못 될 수있는 많은 단계 등이 있습니다

그 중 특히 까다 롭지는 않지만 빠른 도구 나 간단한 워크 플로로보다 정교한 작업을 수행한다면이 작업에 대해 알고 싶습니다.

+1

지루한 방법. 대신'git filter-branch'를 확인하십시오. –

답변

1

그러나 빠른 도구 나 간단한 워크 플로를 사용하면이 문제를보다 명확하게 해결할 수 있습니다. Joseph K. Strauss으로

in the comments, git filter-branch이 충분해야 언급, 플러스 go fmt using the three dot notation :

git filter-branch --tree-filter 'go fmt ...' 

당신은 읽을 수 있습니다 (훨씬) 더 필터 분기에 "git filter-branch - discard the changes to a set of files in a range of commits"에서.

이 명령은 모든 로컬 분기에 대해 실행되며 히스토리를 변경합니다 (변경된 각 커밋에 대해 새 SHA1이 생성되므로).
git push --force은 업스트림 저장소에 새 기록을 게시하는 데 필요할 수 있습니다. 다른 공동 작업자에게 로컬 저장소를 재설정하도록 경고합니다.