다음과 같은 문제
가 있습니다. 스쿼시해야 할 커밋이 많이 있습니다 (수천 개에 달하는 스크립트가 있습니다). 이러한 커밋은 40에서 200 사이의 그룹에 있습니다. 너무 많은 노동이 필요하기 때문에
사용 git rebase -i
이 불가능합니다. 우리는 (참조 해시로 실제 커밋을 얻는 데 사용할 수있는) 브랜치 HEAD에서 이러한 그룹의 상대적인 첫 번째와 마지막 커밋을 출력 할 수있는 도구를 가지고 있습니다.
예를 들어 HEAD ~ 400에서 HEAD ~ 200을 단일 커밋으로 스쿼시 할 수있는 것을 찾고 있습니다. 그런 다음 (인수 변경으로) 다시 실행하여 HEAD ~ 100에서 HEAD ~ 50을 다른 단일 커밋으로 스쿼시 할 수 있습니다.
편집 1 :
나는 rebase 파일을 변경함으로써 본질적으로 상호 작용 성을 위조하는 "가짜"편집기를 만드는 것에 대해 생각했습니다. 추상 예제 스크립트는 다음과 같습니다 (모든 그룹이 스쿼시 될 때까지 반복 할 수 있음).
start=$('get start of oldest group')
end=$('get end of oldest group')
git config core.editor "'~/fakeeditor' -start $start -end $end"
git rebase -i
먼저 git rebase의 할일 목록을 조작하기위한 스크립트를 작성하십시오.
squash-it
파일:
#!/bin/sh
first=$(git rev-parse --short "$1")
last=$(git rev-parse --short "$2")
todo="$3"
lines=$(
sed -n "/^pick $first /,/^pick $last/{s/^pick/squash/p}" "$todo" | sed "1s/squash/pick/"
sed "/^pick $first /,/^pick $last/d" "$todo"
)
echo "$lines" > "$todo"
그런 다음이 스크립트를 다음과 같이 사용하십시오.
GIT_SEQUENCE_EDITOR='sh -c "./squash-it HEAD~100 HEAD~50 $1"' GIT_EDITOR=cat git rebase -i HEAD~100^
당신은 대체 할 수 squash
와 함께 fixup
당신이 원하는 거라면.
당신은 물론 대체하는 스크립트 자체에서이 라인을 생성 할 수 있습니다 HEAD~100
그리고 HEAD~50
당신은 예를 들어 루프에서 좋아하는과를.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다