development

병합 충돌을 해결 한 후 기본 git 커밋 메시지를 사용하는 방법은 무엇입니까?

big-blog 2021. 1. 10. 19:48
반응형

병합 충돌을 해결 한 후 기본 git 커밋 메시지를 사용하는 방법은 무엇입니까?


병합을 수행하고 충돌을 해결 한 후 명령 줄에서 기본 생성 된 커밋 메시지를 수락하는 "쉬운"방법이 있습니까? 개발자 중 한 명이 모든 충돌을 해결 한 다음 git commit -m"Merge Commit"모든 충돌 파일을 나열하는 생성 된 커밋 메시지를 대체하는 작업을 수행 합니다. 수정하지 않고 현재 파일을 가져 오는 다른 플래그를 갖고 싶습니다. -F 또는 --file = 옵션이 있다는 것을 알고 있지만 항상 파일 이름을 알아야합니다.

감사합니다


분명히 여기서 "올바른"대답은 병합 커밋을 생성 할 때 개발자가 팀에 대한 올바른 관행을 따르도록하는 것입니다. 원하는 동작이 기본값이었으며 최근에야 git이 병합을 위해 "인간 생성"커밋 메시지를 요구하기 시작했습니다. 그 이유는 개발자가 무의미한 메시지로 프로세스를 단락시키기위한 것이 아닙니다.

개발자가 대신 리베이스해야 할 때 병합 커밋을 생성하고 있습니까?

즉, 병합 커밋은의 출력이며 git fmt-merge-msg병합 커밋의 부모를 제공해야합니다.


워드 프로세서 , 난 그냥이 간단한 명령을 시도하고 나를 위해 일한 :

git commit --no-edit

그런 다음 실행 git log하여 기본 메시지가 사용되었는지 확인합니다.


기본적으로 병합에 실패하면 사용할 커밋 메시지가 git 폴더의 파일 (일반적으로 .git/MERGE_MSG. 충돌이 해결 된 후 실행 git commit하면이 저장된 메시지가 기본 편집기에 제공됩니다.

메시지가 자체적으로 선택되지 않는 경우 --file파일에서 커밋 메시지를 읽는 옵션을 사용하여 git 명령에 피드 할 수 있습니다 .

git commit --file .git/MERGE_MSG

아무것도하지 않는 명령으로 편집기를 설정하기 만하면됩니다.

GIT_EDITOR=true git commit

git commit --file .git/MERGE_MSG 이미 언급했듯이 괜찮지 만 몇 가지 사항을 무시합니다.

  • 현재 디렉토리가 최상위 디렉토리가 아닙니다.
  • 현재 저장소는 Git 하위 모듈이므로 .git디렉토리 가없고 파일 만 있습니다 .git.

그리고 선택적으로 :

  • MERGE_MSG 충돌이있는 파일에 대한 정보가 포함되어 있습니다.

처음 두 점은 다음과 함께 사용할 수 있습니다 git rev-parse.

git commit -F "$(git rev-parse --git-dir)/MERGE_MSG"

또는 Git 별칭을 사용합니다.

commit-merge = !cat $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -

이것은 "일반"저장소와 하위 모듈 모두에서 작동합니다. 는 IF #-marked 충돌 마커는 폐기되어야한다, 단순화를 위해, 병합 메시지의 첫 번째 줄은 수행 될 수있다 :

git commit -m $(head -1 $(git rev-parse --git-dir)/MERGE_MSG)

또는 다른 별칭 :

commit-merge = !head -1 $(git rev-parse --git-dir)/MERGE_MSG | git commit -F -

나는 -FGit이 bash를 사용하여 생성 된 명령에서 처리 할 따옴표를 내보낼 수 없기 때문에 별칭에 키 를 사용해야했습니다 (그렇지 않으면 git commit병합 중에 부분 커밋에 대해 불평 할 것입니다).


이틀 전에 출시 된 Git 2.12.0 git merge --continue에서는 병합 중 충돌시 중지 된 병합 커밋을 만들 수 있습니다. 하위 모듈에서도 잘 작동하지만 --no-edit적어도 아직 허용하지 않으므로 편집자는 병합을 완료하기 전에 커밋 메시지를 변경하는 것이 좋습니다.


정말로이 규칙을 적용하고 싶다면 git hooks를 사용하여 강제하는 방법이있을 수 있습니다.

병합 충돌이 발생할 때마다 'combined diff'가 충돌 한 파일을 표시합니다 git diff HEAD HEAD^1 HEAD^2 --name-only.. 기술적으로 결합 된 diff가 충돌하는 파일보다 더 많은 파일 을 표시하는 것이 가능한지 모르겠습니다 .

그러나 우리가 원하는대로 작동한다고 가정하면 (가정) 사용자가 입력 한commit-msg 메시지 확인 하고 주장 하는 git 후크를 가질 수 있습니다.

  1. 이것은 병합 커밋입니까?
  2. 그렇다면 결합 된 diff 표시 파일이 있습니까?
  3. 그렇다면 "Conflicts :"문자열 뒤에 해당 파일 이름이 표시됩니까?

이러한 조건이 실패하면 스크립트가 무엇이 잘못되었는지에 대한 설명을 화면에 인쇄하도록 한 다음 0이 아닌 값을 반환하여 커밋을 중단합니다. 개발자가이 커밋 후크를 설치하도록하거나 서버에 설치하여 확실히 적용 할 수도 있습니다.

참조 URL : https://stackoverflow.com/questions/13961847/how-to-use-the-default-git-commit-message-after-resolving-merge-conflicts

반응형