2017-01-19 2 views
1

git rebase을 수행하고 커밋 메시지가 특정 정규 표현식과 일치하는 커밋을 삭제하려고합니다. 예를 들어,`git rebase`에 커밋 메시지로 커밋을 보냅니다.

git rebase --drop="deletme|temporary" master 

처럼 작동 할 수 있습니다 그리고 문자열 deleteme 또는 temporary을 포함하는 모든 커밋을 삭제하면서이 master 통해 REBASE 할 것입니다.

표준 Git 도구로 이것을 수행 할 수 있습니까? 그렇지 않다면 제 3 자 Git 도구로 가능합니까? 특히, 나는 그것이 비대화 형의 단일 명령이되고 싶다.

+2

누군가가 문제를 찾습니다;) –

+0

의도하지 않은 결과가 발생 했습니까? – JeremyKun

+0

그 모두를 할 수있는'filter-branch'를 시도해보십시오. –

답변

1

이것은 this answer에 사용 된 것과 동일한 방법을 사용하여 수행 할 수 있습니다.

먼저 관련 커밋을 찾아야합니다.

git log --format=format:"%H %s" master..HEAD | grep -E "deleteme|temporary" 

이 당신에게 deleteme 또는 master하고 현재 지점 사이 temporary를 포함하는 커밋 메시지와 커밋의 목록을 제공합니다 : 당신은 같은 뭔가 그렇게 할 수 있습니다. 이것은 삭제해야하는 커밋입니다.

저장이 스크립트 어딘가에 당신은 그것을 액세스 할 수 있습니다

#!/bin/bash 

for sha in $(git log --format=format:"%H %s" master..HEAD | grep -E "deleteme|temporary" | cut -d " " -f 1) 
do 
    sha=${sha:0:7} 
    sed -i "s/pick $sha/drop $sha/" [email protected] 
done 

은 다음과 REBASE을 실행

GIT_SEQUENCE_EDITOR=/path/to/script.sh git rebase -i 

이 자동으로 커밋 메시지에 deleteme 또는 temporary를 포함하는 모든 커밋을 삭제합니다. 내 다른 답변에서 언급 한 바와 같이

:

사용할 위탁하는 계산하기 위해 실행되는 어떤 명령을 사용자 정의 할 수 [이 스크립트는 허용하지 않습니다, 그러나 이것은 문제가있는 경우, 당신은 아마 통과 할 수 환경 변수에서 사용자 정의 할 수 있습니다.

필수 경고하십시오 REBASE 역사를 다시 쓰는 때문에이이 지점에서 작업을 다른 사람을 위해/위험 중단 할 수 있습니다. 당신이 협력하고있는 누구와도 당신이 한 일을 분명하게 전달하십시오.

+1

'git log --format = format : "% H % s"마스터가 나타납니다. grep -E "deleteme | temporary"는 모든 커밋 (마스터에있는 커밋 포함)을 포함합니다. 현재 분기 (master와 비교하여)에서만 커밋을 출력하도록 수정할 수 있습니까? – JeremyKun

+0

'git log HEAD ... master'라고 생각 하나? – JeremyKun

+0

@JeremyKun : 물론, 내 대답이 업데이트되었습니다. –

1

지. 대화 형 리베이스를 사용하십시오. 따라서 git rebase -i <first commit that should not be touched>을 수행 한 다음 vim에서 커밋 목록이있는 곳에서 으로 시작하는 커밋 메시지를 가진 모든 커밋에 대해 drop stanza를 사용하려면 :%s/^[^ ]* \([^ ]* issue\)/d \1/g을 수행 할 수 있습니다. 그러나 git rebase은 병합 커밋과 함께 최적으로 작동하지 않습니다. 기본적으로 건너 뛰고 기록은 병합되지만 매개 변수로 유지할 수 있습니다.

+0

나는 더 구체적 이어야만했는데, 나는이 과정을 머리없이 자동화하고 싶다. – JeremyKun

+0

그런 다음'git -c core.editor = 'sed -i's/^ [^] * \ ([^] * issue \)/d \ 1/g와 같은 비대화 형 편집기를 사용하십시오. <처음부터 손대지 말 것>. 수동 조작없이 위와 동일한 효과. – Vampire