2016-07-18 2 views
0

주어진 프로젝트에서 리베이스되고 압축 된 커밋 수를 식별 할 수 있는지 궁금합니다. 스쿼시를 수행 한 것뿐만 아니라 모든 리베이스를 해결할 수 있습니다.rebase -i를 사용하여 압축 된 커밋 식별 -i

필자는 주어진 프로젝트에 대해 사용자가 실행 한 리베이스 수를 계산할 수있는 함수를 작성하려고합니다.

예를 들어 다음과 같은 해시를 가진 프로젝트가 세 개있는 경우 1234, 5678, 9999. 1234 커밋이 원래 11112222 인 커밋을 식별 할 수 있기를 원하지만 커밋을 위해 rebase 및 squashed되었습니다. 1234.

마찬가지로, git log | grep -i merge을 실행하여 병합으로 만들어진 커밋을 찾을 수 있습니다.

이상적으로 이것은 방금 언급 한 명령과 유사한 하나의 라이너 일 것입니다.

두 개 이상의 커밋을 스쿼시 한 ​​경험으로 새 줄이 결합 된 모든 커밋 메시지를 포함하는 리베이스 된 커밋이 발생합니다 (커밋 메시지는 리베이스 중에 편집되지 않는다고 가정). 이 정보로는 불가능 해 보입니다. 그러나, 나는 이것이 나의 프로젝트를 엄청나게 도울 것이므로이 일을 할 수 있기를 원하기 때문에 묻고있다.

TLDR : 하나의 라이너가 rebase에 의해 작성된 커밋을 찾습니다. 힘내는 rebased 커밋을 표시하기 위해 특별한 작업을 수행합니까?

+0

"두 개 이상의 커밋을 스쿼시하는 경험으로 인해 커밋 메시지를 모두 포함하는 리베이스 된 커밋이 결과로 나타납니다." - 그거 말고. 그것은 단지 기본값입니다. 메시지는 리베이스 중에 또는 후에 편집 될 수 있습니다. 그런데 병합 커밋에는 메시지에 "병합"이라는 단어가 반드시 포함되지는 않습니다. 프로젝트에 대한 더 많은 정보없이 가정 할 수있는 것이 확실하지 않습니다. – hvd

+0

@hvd 예, rebase 중에 커밋 메시지가 편집되지 않았다는 가정을하고있었습니다. 편집 된 질문보기 – marcusshep

+0

로컬 리포지토리의 경우 reflog를 사용하여 대략적인 예상치를 얻을 수 있습니다.'git reflog | awk 'BEGIN {n = 0}/rebase -i/{n + = 1; 다음} {if (n) print n; n = 0} END {if (n) print n} '' – eush77

답변

1

git reflog을 사용하여이 작업을 수행 할 수있었습니다.

git reflog을 포함한 의 모든 작업을 제공합니다. 나는 모든 포함 된 명령 모두 문자열 rebasefinish 다음을 계산을 찾을 수 있었다이 정보를

some-computer:test_project marcusshepherd$ git reflog 
On branch master 
nothing to commit, working directory clean 
47066c8 [email protected]{0}: rebase -i (finish): returning to refs/heads/master 
47066c8 [email protected]{1}: rebase -i (squash): add bar.txt 
ae35743 [email protected]{2}: rebase -i (start): checkout HEAD~2 
7c5b185 [email protected]{3}: commit: edit bar.txt 
ae35743 [email protected]{4}: commit: add bar.txt 
a9b6aa1 [email protected]{5}: commit (initial): init 

다음과 같이

일반적인 출력이다. 이것은 주어진 프로젝트에 대한 정확한 리베이스 횟수를 제공합니다.

이 문제를 해결해 주셔서 감사합니다.

관련 문제