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에서 생성

답변

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는 원격 브랜치에서 효과적으로 작동하지 않으며 로컬에서 작업 한 브랜치에서만 효과적입니다.


답변

첫째, 지점이 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 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)