IT

Git 브랜치 생성시기를 결정하는 방법은 무엇입니까?

lottoking 2020. 3. 19. 08:27
반응형

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 logreflog에 항목을 작성한 조치를 작성한 날짜가 아니라 커밋 날짜를 표시합니다. 위의 경로에서 실제 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

반응형