Git 브랜치를 언제 만들지 결정하는 방법이 있습니까? 리포지토리에 지점이 있으며 생성 시점을 기억하지 못하며 생성 타임 스탬프를 보는 것이 내 기억을 손상시킬 수 있다고 생각했습니다.
Git 브랜치를 언제 만들지 결정하는 방법이 있습니까? 리포지토리에 지점이 있으며 생성 시점을 기억하지 못하며 생성 타임 스탬프를 보는 것이 내 기억을 손상시킬 수 있다고 생각했습니다.
답변:
사용하다
git show-요약`git merge-base foo master`
gitk를 사용하여 컨텍스트에서 보려는 경우 다음을 사용하십시오.
gitk --all --select-commit =`git merge-base foo master`
(여기서 foo는 찾고있는 지점의 이름입니다.)
로 의견에서 지적 과에 Jackub의 대답은 , 한 지사가 설정 설정에서 설정 한 일 수보다 어리다으로 gc.reflogexpire
분기 기준 일 때 (기본 90 일)에, 당신은 알아 보려면 reflog를 활용할 수 처음 생성되었습니다.
git reflog
대부분의 git log
플래그 를 사용할 수 있습니다 . 또한 HEAD@{0}
스타일 선택기는 사실상 시간 개념이며 실제로는 해킹 된 방식으로 날짜 문자열로 처리됩니다. 이것은 플래그를 사용하고 다음 --date=local
과 같이 출력을 얻을 수 있음을 의미합니다 .
$ git reflog --date = local 763008c HEAD @ {2010 년 8 월 20 일 금요일 10:09:18} : 풀 : 빨리 감기 f6cec0a HEAD @ {화 8 월 10 일 09:37:55 2010} : 당기기 : 빨리 감기 e9e70bc HEAD @ {2 2 월 4 일 02:51:10}} : 당기기 : 빨리 감기 836f48c HEAD @ {2010 년 1 월 21 일 목요일 14:08:14} : 결제 : 마스터에서 마스터로 이동 836f48c HEAD @ {2010 년 1 월 21 일 14:08:10} : 풀 : 빨리 감기 24bc734 HEAD @ {수 1 월 20 일 수요일 12:05:45} : 결제 : 74fca6a42863ffacaf7ba6f1936a9f228950f657에서 이동 74fca6a HEAD @ {수 1 월 20 일 11:55:43 2010} : 결제 : 마스터에서 v2.6.31로 이동 24bc734 HEAD @ {수 1 월 20 일 수요일 11:44:42}} : 당기기 : 빨리 감기 964fe08 HEAD @ {월 2009 년 10 월 26 일 15:29:29} : 결제 : 4a6908a3a050aacc9c3a2f36b276b46c0629ad91에서 이동 4a6908a HEAD @ {월 2009 년 10 월 26 일 14:52:12} : 결제 : 마스터에서 v2.6.28로 이동
다음과 같은 경우에도 유용 할 수 있습니다 --date=relative
.
$ git reflog --date = relative 763008c HEAD @ {4 주 전} : 풀 : 빨리 감기 f6cec0a HEAD @ {6 주 전} : 풀 : 빨리 감기 e9e70bc HEAD @ {8 개월 전} : 풀 : 빨리 감기 836f48c HEAD @ {8 개월 전} : 체크 아웃 : 마스터에서 마스터로 이동 836f48c HEAD @ {8 개월 전} : 풀 : 빨리 감기 24bc734 HEAD @ {8 개월 전} : 체크 아웃 : 74fca6a42863ffacaf7ba6f1936a9f228950f657에서 마스터로 이동 74fca6a HEAD @ {8 개월 전} : 체크 아웃 : 마스터에서 v2.6.31로 이동 24bc734 HEAD @ {8 개월 전} : 풀 : 빨리 감기 964fe08 HEAD @ {11 개월 전} : 체크 아웃 : 4a6908a3a050aacc9c3a2f36b276b46c0629ad91에서 master로 이동 4a6908a HEAD @ {11 개월 전} : 체크 아웃 : 마스터에서 v2.6.28로 이동
마지막 참고 사항 : --all
플래그 (실제로 git-reflog에 의해 이해되는 git-log 플래그)는 분기 이벤트를 명확하게 표시하는 ( refs/
간단히 대신에) 알려진 모든 ref에 대한 reflog를 표시합니다 HEAD
.
git reflog --date = local --all 860e4e4 심판 / 헤드 / 마스터 @ {2010 년 9 월 19 일 23:00:30} : 커밋 : 두 번째. 17695bc refs / heads / example_branch @ {2010 년 9 월 20 일 월요일 00:31:06} : 지점 : HEAD에서 생성
gc.reflogexpire
며칠 안에 이루어집니다.
Pro Git § 3.1 Git Branching-지점이란 무엇인가 git 지점이 실제로 무엇인지에 대한 좋은 설명이 있습니다.
Git의 브랜치는 단순히 커밋에 대한 가벼운 이동 포인터입니다.
브랜치는 가벼운 포인터 일 뿐이므로 git은 히스토리 또는 생성 날짜에 대한 명확한 개념이 없습니다. "하지만 잠깐만, 물론 git은 내 지사 기록을 알고있다!" 글쎄요.
다음 중 하나를 실행하는 경우 :
git log <branch> --not master
gitk <branch> --not master
"브랜치의 히스토리"처럼 보이는 것을 볼 수 있지만 실제로는 "브랜치"에서 도달 할 수있는 커밋 목록이며 마스터에서는 도달 할 수 없습니다. 이것은 원하는 정보를 제공하지만 '분기'를 다시 마스터로 병합 한 적이없고 마스터를 '분기'로 병합 한 적이없는 경우에만 가능합니다. 당신 이 있다면 합병 후 차이의 역사는 붕괴됩니다.
다행스럽게도 여기에는 다양한 답변이 설명 된 것처럼 reflog에 원하는 정보가 포함되는 경우가 많습니다. 이것을 사용하십시오 :
git reflog --date=local <branch>
지점의 역사를 보여줍니다. 이 목록의 마지막 항목은 분기를 만든 지점 일 것입니다.
브랜치가 삭제 된 경우 'branch'는 더 이상 유효한 자식 식별자가 아니지만 대신 이것을 사용하여 원하는 것을 찾을 수 있습니다.
git reflog --date=local | grep <branch>
또는 Windows cmd 쉘에서 :
git reflog --date=local | find "<branch>"
reflog는 원격 브랜치에서 효과적으로 작동하지 않으며 로컬에서 작업 한 브랜치에서만 효과적입니다.
git reflog --date=local <branch>
첫째, 지점이 gc.reflogexpire
며칠 내에 생성 된 경우 (기본 90 일, 즉 약 3 개월) reflog에서 첫 번째 항목을 사용 git log -g <branch>
하거나 git reflog show <branch>
찾을 수 있습니다.이 이벤트는 생성 이벤트이며 다음과 같습니다 (for git log -g
).
Reflog: <branch>@{<nn>} (C R Eator <creator@example.com>)
Reflog message: branch: Created from <some other branch>
누가 브랜치를 생성했는지, 얼마나 많은 작업을 수행했는지, 어느 브랜치에서 생성했는지를 알 수 있습니다 (물론 "HEAD에서 생성됨").
그것이 MikeSep이 그의 대답에서 말한 것 입니다.
둘째, 분기가 더 길고 gc.reflogexpire
실행 한 경우 git gc
(또는 자동으로 실행 된 경우) 생성 된 분기와 공통 조상을 찾아야합니다. 구성 파일을 살펴보십시오. branch.<branchname>.merge
항목 이있을 수 있습니다.이 항목은 기반이되는 지점을 알려줍니다.
예를 들어 해당 분기가 마스터 분기에서 생성 된 경우 (마스터 분기에서 분기)를 알고있는 경우 다음 명령을 사용하여 공통 조상을 볼 수 있습니다.
git show $(git merge-base <branch> master)
git show-branch <branch> master
대안으로 시도해 볼 수도 있습니다 .
이것이 바로 gbacon 이 그의 답변에서 말한 것입니다 .
아직 git 명령을 확신하지 못하지만 참조 로그에서 찾을 수 있다고 생각합니다.
.git/logs/refs/heads/<yourbranch>
내 파일에 유닉스 타임 스탬프가있는 것 같습니다.
업데이트 : 로그를 인쇄 할 때 커밋 기록 대신 reflog 기록을 사용하는 옵션이있는 것으로 보입니다.
git log -g
분기를 만들었을 때도이 로그를 따를 수 있습니다. git log
reflog에 항목을 작성한 조치를 작성한 날짜가 아니라 커밋 날짜를 표시합니다. 위의 경로에서 실제 reflog를 보는 것 외에는 아직 그것을 찾지 못했습니다.
이 시도
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)'
%
전에 필요할지도 모른다(refname)
| cut -c 5- | sort -r |
로 연결 한 다음 한 달 동안 grep을 통해 파이프로 연결하여 역순으로 나열합니다.
--sort='-committerdate'
(역순으로 순서를 정하기 전에 '-'에주의하십시오) 를 추가하여 정렬 할 수 있습니다 .
사용하다:
git reflog
현재 폴더에 리포지토리의 모든 수명주기를 표시합니다. 처음에 나타나는 지점 이름 (아래에서 위로)은 작성된 소스입니다.
855a3ce HEAD@{0}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{1}: checkout: moving from feature-sut-46 to development
855a3ce HEAD@{2}: checkout: moving from feature-jira35 to feature-sut-46
535dd9d HEAD@{3}: checkout: moving from feature-sut-46 to feature-jira35
855a3ce HEAD@{4}: checkout: moving from development to feature-sut-46
855a3ce HEAD@{5}: checkout: moving from feature-jira35 to development
535dd9d HEAD@{6}: commit: insert the format for vendor specific brower - screen.css
855a3ce HEAD@{7}: checkout: moving from development to feature-jira35
855a3ce HEAD@{8}: checkout: moving from master to development
그 의미는 다음과 같습니다.
마스터에서 지점 개발이 생성됩니다 (체크 아웃 -b).
브랜치 피처 -jira35가 개발에서 생성됩니다 (체크 아웃 -b).
브랜치 피처 -jira-sut-46은 개발에서 생성됩니다 (체크 아웃 -b)
이 쇼에게 지점의 만든 날짜 명령 dev
에서을main
$git reflog show --date=iso dev
$7a2b33d dev@{2012-11-23 13:20:28 -2100}: branch: Created from main
Andrew Sohn의 답변과 결합 ( https://stackoverflow.com/a/14265207/1929406 )
branchcreated=$(git reflog show --date=format:'%Y-%m-%d %H:%M:%S' --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1| cut -d'{' -f 2| cut -d'}' -f 1 | xargs)
echo $branchcreated
이것은 나를 위해 그것을했다 : (10 년 후)
git log [--remotes] --no-walk --decorate
브랜치 생성 시간에 저장된 정보가 없기 때문에이 작업은 커밋 --no-walk
날짜를 포함하여 각 브랜치의 첫 커밋 ( )을 표시합니다 . 를 사용하여 --remotes
원격 지점에 대한이 지역의 지점을 위해 그것을 생략하거나.
다른 것을 만들기 전에 지점에서 적어도 한 번의 커밋을 수행했기 때문에 문서화를 위해 몇 개월 동안의 지점 만들기 (및 기능 dev-start 기능)를 추적 할 수있었습니다.