변화와 새 메시지를 전하지 않는 방법?


137

commit파일을 변경하지 않은 경우 어떻게 새 메시지를 작성하고 새 메시지를 작성할 수 있습니까?

커밋 코드 (SHA?)가 동일하기 때문에 이것이 가능하지 않습니까?

답변:


168

이를 수행 할만한 이유는 거의 없지만, 빈 커밋 메시지 --allow-empty와 달리 빈 커밋 (파일이 변경되지 않음 )에 대한 매개 변수입니다 --allow-empty-message. 온라인 설명서를 입력 git help commit하거나 방문하여 자세한 내용을 읽을 수도 있습니다 .

트리 객체 (해시 자체가 있음)는 동일하지만 커밋에는 실제로 다른 타임 스탬프와 메시지가 있고 다른 상위 커밋이 있기 때문에 실제로 다른 해시를 갖게됩니다. 이러한 세 가지 요소가 모두 git객체 해시 알고리즘에 통합되어 있습니다.


있습니다 당신은이 (의견의 일부를 포함) 저지를 비워 할 수있는 몇 가지 이유 :

  • "선언적 커밋"으로 테스트 또는 보푸라기 통과 ( Robert Balicki 사용 )에 대한 사후 데이터를 포함하여 내레이션 또는 문서 ( DavidNeiss 를 통해 ) 를 추가합니다 .
  • Vaelusgit 를 통해 임의의 변경을 생성하지 않고 명령 을 테스트 합니다 .
  • gitolite( Tatsh 사용 ) 를 사용하여 삭제 된 Bare 저장소를 다시 작성하십시오 .
  • 빌드 도구를 다시 트리거 하거나 ( mattLummus 를 통해 ) 개인 로깅 또는 메트릭을 위해 ( DynamiteReed 를 통해 ) 임의로 커밋을 새로 만듭니다 . 그러나 브랜치 / 병합 구조에 따라 커밋이 매우 오래 지속될 수 있으므로 "무의미한 커밋 없음"전략이 팀의 저장소를 임시 워크 플로우 아티팩트로 실수로 오염시키고 코드 개정을 분리하기 어렵게 만들 수 있습니다. 임시 변덕.

커밋 트리에 메타 데이터를 추가하는 다른 전략은 다음과 같습니다.

  • 항상 특정 상태의 커밋을 가리키는 별도의 분기 또는 경량 태그 (예 : "마지막으로 승인 된 커밋"또는 "현재 스테이징 커밋")
  • 커밋 트리 자체에 항목을 추가하지 않고 기존 커밋을 가리키는 타임 스탬프, 커미터 및 메시지를 기록하는 방법에 대한 주석이 달린 태그 .
  • git notes 기존의 불변 커밋 위에 변경 가능한 메모를 연결합니다.

2
git flow branch 모델 을 따르기 시작했습니다 . 당신이 할 때 dev지점 형태로 master당시로서는 및 feat지점 즉시에서을 devfeat지점 외모는에서 와서 master아무 구별이 커밋하지 존재하는 한 가지 dev분기 feat분기에서 온다. dev지점 을 처음 만들 때 빈 커밋 은 dev지점과 독립적으로 무기한 지속되는 지점이므로 지점을 설정하는 데 도움 이 master됩니다. 일반적으로 분기를 레이어로 사용하고 단일 커밋에서 두 개의 레이어를 만들 때 유용합니다
초보자 C

2
또 다른 이유 : 푸시하기 전에 커밋 메시지에서 중요한 것을 생략 commit --amend하면 리모컨이 강제 푸시를 허용하지 않으면 수행 할 수 없습니다 . 이렇게하면 개발자가 이전 커밋과 함께 제공되는 중요한 메시지를 볼 수 있습니다.
Andy J

1
커밋을 푸시했기 때문에이 작업을 수행하고 싶지만 커밋 메시지에 언급하는 것을 잊었습니다. 커밋 메시지는 이슈 추적 및 지속적인 통합 소프트웨어와 통합되며 커밋 메시지의 내용은 해당 응용 프로그램에 영향을줍니다. 더 좋은 방법이 있습니까? 이것은 내 경우에 가장 좋은 솔루션처럼 보입니다. 내가 상상할 수있는 유일한 방법은 어떻게 든 이전 커밋을 되돌릴 수 있다는 것입니다.
sytech

1
방금 데이터베이스를 스크립팅하는 사전 커미트 후크를 트리거하기 위해 이것을 사용했습니다. 따라서 변경 사항이 있었으므로 스크립트가 실행될 때까지 git이 볼 수 없었습니다. 물론 수동으로 실행할 수는 있지만 스크립트를 두 번 실행합니다.
yoyodyn

1
github에 내장 된 이슈 트래킹과 github 및 gogs로 상호 작용할 때 매우 유용합니다.
SimonF

37

내가 당신을 올바르게 이해했다면, 당신은 빈 커밋을 원합니다. 이 경우 다음이 필요합니다.

git commit --allow-empty

35

메시지가있는 빈 커밋

git commit --allow-empty -m "Empty test commit"

빈 메시지가있는 빈 커밋

git commit --allow-empty --allow-empty-message

3

gitversion 과 같은 시스템을 사용하는 경우 이러한 종류의 커밋을 수행하는 것이 좋습니다. + semver : major comment를 사용하여 메이저 버전을 충돌시키는 커밋을 가질 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.