2010-03-19 2 views
11

로컬 작업에 git을 사용하고 (너무 좋아합니다) this article에 설명 된 것과 비슷한 워크 플로를 따릅니다. 그래서 기본적으로 새로운 기능을 시작할 때, 나는 그것을위한 브랜치를 만들고, 일반적인 해킹을 수행 한 다음, 커밋주기를 수행하고, 완료되었다고 생각하면 git rebase --interactive master을 사용하여 단일 커밋으로 스쿼시한다. 물론git rebase --interactive commit 메시지의 형식을 사용자 정의하려면 어떻게해야합니까?

[#3275] User Can Add A Comment To a Post 

* Adding Comment model, migrations, spec 
* Adding Comment controller, helper, spec 
* Adding Comment relationship with Post 
* Comment belongs to a User 
* Comment form on Post show page 

그/각의 앞에 *을 붙여 커밋 메시지를 # This is the xth commit message 라인 및 복사를 제거하는 무리 후입니다 : 기사의 예처럼 보이는 뭔가에 커밋 메시지의 무리를 편집 결국, 여기에 재현 .

이제는 이 어떻게 git rebase -i가 squashed 커밋 메시지를 출력하는지 사용자 정의 할 수있는 방법이 있습니까? 그래서 해킹을 할 필요가 없습니까?

(그 중요한 경우 내가 msysgit을 사용합니다. 내 편집기 메모장입니다 ++.)

감사합니다!

+1

git에서 지금까지 지원을 추가 했으므로 허용 된 대답을 변경하는 것이 좋습니다 – Joakim

+0

@Joakim 아래에서 설명하는 것처럼 git 2.6 기능은 OP와 정확하게 일치하지 않으므로 Jefromi의 답변이 나옵니다. – VonC

답변

4

스쿼시 메시지 템플릿을 수정하는 방법 (소스 해킹 부족)이 없다고 생각하지 않습니다. 그러나 몇 가지 옵션이 있습니다 :

  • 이 명단을 얻기 위해 자식 로그 명령을 사용하여, 자식 로그 --pretty = "* %의"`같은 것을 커밋 1..commit-2를 얻을 수 총알. 리눅스에서는 에디터 내에서이 작업을 수행하는 것이 가능합니다. msysgit에서 어떻게 작동하는지 알지 못합니다.

  • 편집자에게 작업을 의뢰하십시오! 편집자가 무엇인지 모르겠으므로 무엇을해야 할지를 실제로 말할 수는 없지만 vim에서는 확실히 가능할 것입니다. 당신이 아마,이 경우 원하는 아니지만, 상당히 최근의 버전에서는 또한

을 (생각의 존재는, 하나를 유지, 몇 행을 삭제, /# This is the .* commit message/ 검색 다음 댓글까지 삭제) git, squirt 대신 사용할 수있는 fixup 식별자가 있습니다. 동일한 작업을 수행하지만 커밋 메시지를 무시하므로 실제 메시지와 함께 커밋 한 다음 10 개의 수정 사항 만 있으면 모든 fixup을 표시 할 수 있습니다. 그들의 일회용 메시지를 삭제해야합니다.

+0

동의합니다. +1. 픽스 업 (및 자동 채움)에 대한 자세한 내용은 http://stackoverflow.com/questions/2302736/trimming-git-checkins/2302947#2302947 – VonC

+0

Cool! msysgit을 업데이트하고이 픽스 업과 같은 기회를 주어야합니다. :) – adamjford

+0

나는 텍스트 편집 헛소리에 Vim을 사용하기 시작 했으므로 # 2 문으로 가려고합니다. – adamjford

0

원하는 경우 --amend를 만들 수 있습니다. 이전에 커밋을 체크 아웃하면 커밋하고 변경하기를 원할 수 있습니다.

+0

그래, 나는 뚱뚱한 손가락이 있기 때문에 - 아마 꽤 사용한다. :) 그러나 나는 커밋 된 메시지를 편집하기 위해 커밋 된 커밋을 고칠 필요가 없습니다. 각 커밋에 pick/edit/squash를 지정한 후에 나타나는 텍스트 편집기에서 포맷합니다. 나는 이것을 설명하기 위해 나의 질문을 명확히했다. – adamjford

9

Git 2.6 이상 (Q3 2015)을 시작하면 실제로 git rebase -i commit 메시지를 구성 할 수 있습니다.

commit 16cf51c (2014 년 6 월 13 일) Michael Rappazzo (rappazzo)을 참조하십시오.

git-rebase--interactive.sh (2015 년 8 월 3 일 commit 9f56db7Junio C Hamano -- gitster --에 의해 합병) : 사용자 정의 명령 형식의

설정 옵션 'rebase.instructionFormat'기본값을 재정의 할 수 있습니다 'oneline'형식 설정 옵션을 추가 리베이스 명령리스트.

목록은 왼쪽, 오른쪽 또는 경계 표시와 sha1을 사용하여 구문 분석되므로 지침 형식 앞에 추가됩니다. , git log에 지정된 대화 형 REBASE 동안 명령 목록에 사용되는 바와 같이,

rebase.instructionFormat 

포맷 스트링 :

은 곧 새로운 설정을해야합니다.
형식에는 자동으로 형식에 긴 커밋 해시가 추가됩니다. 예를 들어

: "Comment in rebase instruction has become too rigid는"

나는 형식 것으로 나타났습니다
참조 : 해당 기능의 출시 후 버그/회귀가

git config --add rebase.instructionFormat "[%an @ %ar] %s" 

주 리베이스 명령 시트의 주석 행이 더 엄격 해졌습니다. 더 이상 공백이나 탭으로 시작할 수 없습니다. 주석 문자 (예 : "#")는 첫 번째 열에 표시되어야합니다.


Jefromi 의견 below :

는이 메시지 만 커밋 발생하지, 대화 형 REBASE 내 디스플레이에 영향을 의미하는 것 나타납니다.

예제 형식 문자열로 시도해 보았습니다. 실제로 편집기에서 작성자 정보를 보았습니다. 그러나 일단 스쿼시라고 말하면 결과 템플릿 커밋 메시지는 여전히 일반적인 것입니다.

이렇게 이것은 OP에 꼭 맞는 것은 아닙니다.

+0

누군가 내 대답이 잘못되었으므로 이제 이것에 대해 살펴 보았습니다. 대화식 rebase 내에서의 표시에만 영향을 미치고 결과 메시지는 영향을 미치지 않는 것으로 보입니다. 예제 형식 문자열로 시도해 보았고 편집기에서 작성자 정보를 실제로 보았습니다. 그러나 스쿼시라고 말하면 결과로 나타나는 템플릿 커밋 메시지는 여전히 일반적인 것입니다. – Cascabel

+0

@ Jefromi 좋은 지적. 더 많은 가시성을 얻기 위해 답안에 귀하의 의견을 포함 시켰습니다. 그리고 귀하의 대답은 여전히 ​​하나라는 질문에 대한 의견을 추가했습니다. – VonC

관련 문제