[git] 명령 줄에 분기 계층 구조를 표시 하시겠습니까?

명령 줄에 분기 계층을 표시하는 방법이 있는지 궁금합니다. 예를 들어 다음 git branch과 같은 출력을 보는 대신을 사용하는 경우 :

* master
joes_work
refactoring
experiment

다음과 같은 출력이 표시됩니다.

* master
    joes_work
    refactoring
        experiment

이렇게하면 특정 분기가 분기 된 분기를 쉽게 확인할 수 있습니다. 트리 구조를 출력하는 특정 명령이 없더라도 어느 분기가 어느 분기에서 왔는지에 대한 정보를 출력하는 명령이 있습니까? perl 스크립트를 사용하여 출력 형식을 지정할 수 있습니다.



답변

sehe의 솔루션은 멋져 보입니다. 여기에는 유사한 정보를 포함하는 것으로 보이는 다른 것이 있고, 형식이 다르며, git log를 사용하므로 커밋 정보도 포함합니다 (브랜치 이름을 무시하고 엉망으로 만들었습니다!).

git log --all --graph --decorate --oneline --simplify-by-decoration

* ae038ad (HEAD, branch2-1) add content to tmp1
| * f5a0029 (branch2-1-1) Add another
|/
* 3e56666 (branch1) Second wave of commits
| * 6c9af2a (branch1-2) add thing
|/
* bfcf30a (master) commit 1


답변

시험

git show-branch
git show-branch --all

출력 예 :

bash$ git show-branch --all
! [branchA] commitA only in branchA
 * [branchB] commitB
  ! [branchC] commitC only in branchC
---------------------
+   [branchA] commitA only in branchA
 *  [branchB] commitB
  + [branchC] commitC only in branchC
 *+ [branchC~1] commitB-1 also in branchC
 *+ [branchC~2] commitB-2 also in branchC
+++ [branchC~3] common ancestor
+++ [branchC~4] more common ancestors


답변

@ctcherry의 답변을 완성하고 싶습니다.

커밋을 한 사용자와 날짜도 볼 수있을 때가 좋기 때문에 다음 줄을 사용할 수 있습니다.

git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

그러나 이것은 꽤 긴 줄이며 암기하기 어렵 기 때문에 별칭을 사용할 수 있습니다. 터미널에서 이것을 사용해야합니다.

git config --global alias.lg "HERE GOES MY BIG LOG COMMAND LINE"


요약하려면 아래 행을 복사하여 터미널에 붙여 넣으십시오.

git config --global alias.lg "log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

그런 다음 git lg로그 기록 트리를 가져 오기 위해을 사용해야 합니다.

예:
여기에 이미지 설명 입력

src


답변

gitkcommand를 입력하고 Enter를 누르기 만하면 됩니다.

나를 gitk위해 이것에 대한 가장 쉬운 해결책입니다. 명령 모드는 표시되지 않지만 다음과 같은 멋진 UI가 자동으로 채워집니다.

여기에 이미지 설명 입력


답변

그것은 git의 관점에서 브랜치가 작동하는 방식이 아닙니다. branch에 커밋하고 분기 a를 생성 b하고 거기에서 작업 한 다음 다른 작업을 다시 수행하십시오 a.

A -- B -- D <-- a
       \
        \
          C <-- b

다른 방법으로했다면 구별 할 수 없습니다.

A -- B -- C <-- b
       \
        \
          D <-- a

내가 생각할 수있는 유일한 방법은 특정 브랜치가 어떤 브랜치에서 시작되었는지 알아 내기 위해 생각할 수있는 유일한 방법은 리플 로그이지만 이것은 신뢰할 수 없습니다 (90 일보다 오래된 항목은 일반적으로 삭제됨).


답변

어떻게이 별명에 대해 .gitconfig:

[alias]
branch-tree = !cd "$(git rev-parse --git-dir)/refs/heads" && tree

타임 스탬프 tree와 같이 명령이 지원 하는 항목에 따라 옵션을 제공 할 수도 있습니다 -D.


답변