주어진 프로젝트에서 리베이스되고 압축 된 커밋 수를 식별 할 수 있는지 궁금합니다. 스쿼시를 수행 한 것뿐만 아니라 모든 리베이스를 해결할 수 있습니다.rebase -i를 사용하여 압축 된 커밋 식별 -i
필자는 주어진 프로젝트에 대해 사용자가 실행 한 리베이스 수를 계산할 수있는 함수를 작성하려고합니다.
예를 들어 다음과 같은 해시를 가진 프로젝트가 세 개있는 경우 1234
, 5678
, 9999
. 1234
커밋이 원래 1111
과 2222
인 커밋을 식별 할 수 있기를 원하지만 커밋을 위해 rebase 및 squashed되었습니다. 1234
.
마찬가지로, git log | grep -i merge
을 실행하여 병합으로 만들어진 커밋을 찾을 수 있습니다.
이상적으로 이것은 방금 언급 한 명령과 유사한 하나의 라이너 일 것입니다.
두 개 이상의 커밋을 스쿼시 한 경험으로 새 줄이 결합 된 모든 커밋 메시지를 포함하는 리베이스 된 커밋이 발생합니다 (커밋 메시지는 리베이스 중에 편집되지 않는다고 가정). 이 정보로는 불가능 해 보입니다. 그러나, 나는 이것이 나의 프로젝트를 엄청나게 도울 것이므로이 일을 할 수 있기를 원하기 때문에 묻고있다.
TLDR : 하나의 라이너가 rebase에 의해 작성된 커밋을 찾습니다. 힘내는 rebased 커밋을 표시하기 위해 특별한 작업을 수행합니까?
"두 개 이상의 커밋을 스쿼시하는 경험으로 인해 커밋 메시지를 모두 포함하는 리베이스 된 커밋이 결과로 나타납니다." - 그거 말고. 그것은 단지 기본값입니다. 메시지는 리베이스 중에 또는 후에 편집 될 수 있습니다. 그런데 병합 커밋에는 메시지에 "병합"이라는 단어가 반드시 포함되지는 않습니다. 프로젝트에 대한 더 많은 정보없이 가정 할 수있는 것이 확실하지 않습니다. – hvd
@hvd 예, rebase 중에 커밋 메시지가 편집되지 않았다는 가정을하고있었습니다. 편집 된 질문보기 – marcusshep
로컬 리포지토리의 경우 reflog를 사용하여 대략적인 예상치를 얻을 수 있습니다.'git reflog | awk 'BEGIN {n = 0}/rebase -i/{n + = 1; 다음} {if (n) print n; n = 0} END {if (n) print n} '' – eush77