병합 충돌을 해결 한 후 기본 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 -
나는 -F
Git이 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 후크를 가질 수 있습니다.
- 이것은 병합 커밋입니까?
- 그렇다면 결합 된 diff 표시 파일이 있습니까?
- 그렇다면 "Conflicts :"문자열 뒤에 해당 파일 이름이 표시됩니까?
이러한 조건이 실패하면 스크립트가 무엇이 잘못되었는지에 대한 설명을 화면에 인쇄하도록 한 다음 0이 아닌 값을 반환하여 커밋을 중단합니다. 개발자가이 커밋 후크를 설치하도록하거나 서버에 설치하여 확실히 적용 할 수도 있습니다.
'development' 카테고리의 다른 글
Java 패키지 이름이 소문자 여야하는 이유는 무엇입니까? (0) | 2021.01.10 |
---|---|
Rmarkdown / knit에서 R 코드를 숨기고 결과 만 표시 (0) | 2021.01.10 |
emacs의 커밋 세부 사항으로 자식 비난 (0) | 2021.01.10 |
할당 된 배열을 보유하는 unique_ptr을 만드는 적절한 방법 (0) | 2021.01.10 |
다른 색의 숫자 (0) | 2021.01.09 |