Git 브랜치 생성시기를 결정하는 방법은 무엇입니까?
Git 브랜치를 언제 만들지 결정하는 방법이 있습니까? 리포지토리에 지점이 있으며 생성 시점을 기억하지 못하며 생성 타임 스탬프를 보는 것이 내 기억을 손상시킬 수 있다고 생각했습니다.
사용하다
git show-요약`git merge-base foo master`
gitk를 사용하여 컨텍스트에서 보려는 경우 다음을 사용하십시오.
gitk --all --select-commit =`git merge-base foo master`
(여기서 foo는 찾고있는 지점의 이름입니다.)
로 의견에서 ponted 과에 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 @ {2010 년 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/
간단히 대신에) 알려진 모든 참조에 대한 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에서 생성
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 식별자가 아니지만 대신 이것을 사용하여 원하는 것을 찾을 수 있습니다.
git reflog --date=local | grep <branch>
또는 Windows cmd 쉘에서 :
git reflog --date=local | find "<branch>"
reflog는 원격 브랜치에서 효과적으로 작동하지 않으며 로컬에서 작업 한 브랜치에서만 효과적입니다.
첫째, 지점이 gc.reflogexpire
며칠 안에 생성 된 경우 (기본 90 일, 즉 약 3 개월), reflog에서 첫 번째 항목을 사용 git log -g <branch>
하거나 git reflog show <branch>
찾을 수 있습니다 (생성 이벤트 일 수 있음 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)'
사용하다:
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)
이것은이 스레드를 발견하기 전에 생각해 낸 것입니다.
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep '/master' | tail -1
git reflog show --date=local --all | sed 's!^.*refs/!refs/!' | grep 'branch:'
이 쇼에게 지점의 만든 날짜 명령 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
참고 URL : https://stackoverflow.com/questions/2255416/how-to-determine-when-a-git-branch-was-created
'IT' 카테고리의 다른 글
CSS 축소기에 대한 권장 사항이 있습니까? (0) | 2020.03.19 |
---|---|
텍스트 파일의 인코딩 / 코드 페이지를 감지하는 방법 (0) | 2020.03.19 |
속성 x가없는 요소와 일치하는 CSS 선택기 (0) | 2020.03.18 |
에뮬레이터에서 Android 애플리케이션이 실행 중인지 어떻게 알 수 있습니까? (0) | 2020.03.18 |
URL 인코딩은 "&"(앰퍼샌드)를 "&"HTML 엔터티로 인식 (0) | 2020.03.18 |