패션처럼 트리에서 자식 분기의 출력


160

지금 "git branch"를 입력하면

내 분기를 임의의 순서로 나열합니다.

내가 선호하는 것은 "git branch"가 fasion과 같은 트리에 내 출력을 나열하면 다음과 같습니다.

master
|-- foo
  |-- foo1
  |-- foo2
|-- bar
  |-- bar4

여기서 foo & bar는 master에서 분기되었습니다. foo1 & foo2는 foo에서 분기되었습니다. bar4는 bar에서 분기되었습니다.

이것이 달성하기 쉬운가?

[명령 줄 유틸리티 만 해당. 이것은 내 zsh / vim 워크 플로우에 맞아야합니다.]


여기에있는 답변 (내 자신의 포함)은 내가 정말로 생각하는 것과 내가 알고있는 것에 대해 적절한 해결책을 제공하지 않는 것 같습니다. 나는 기회가 생겼을 때 이것을 해결하기 위해 새로운 유틸리티를 작성할 것이다. 아마 전화 할 것입니다 git_tree. 다음과 같이 출력 arc flow됩니다 : stackoverflow.com/questions/54227968/… . 아마도 언젠가는 git 자체로 병합 할 수도 있습니다.
가브리엘 스테이 플스

이 사람도 같은 것을 원하는 것 같습니다 : reddit.com/r/git/comments/282c1f/…
Gabriel Staples

git log --graph충분하다고 생각합니다.
DawnSong

답변:


203

아래에 답 용도 git log:

2009 년에 " 터미널에 Git 트리를 표시 할 수 없습니다 "와 비슷한 접근 방식을 언급했습니다 .

git log --graph --pretty=oneline --abbrev-commit

그러나 내가 사용한 전체 내용은 " git log --graph를 사용하여 태그 이름 및 분기 이름을 표시하는 방법 "(2011)에 있습니다.

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

git lgb

원문 답변 (2010)

git show-branch --list 당신이 찾고있는 것 (topo order)과 가깝습니다.

--topo-order

기본적으로 브랜치와 커밋은 역순으로 표시됩니다.
이 옵션을 사용하면 토폴로지 순서대로 표시됩니다 (즉, 하위 커밋은 부모에게 표시됩니다).

그러나 도구 git wtf도움이수 있습니다 . 예:

$ git wtf
Local branch: master
[ ] NOT in sync with remote (needs push)
    - Add before-search hook, for shortcuts for custom search queries. [4430d1b] (edwardzyang@...; 7 days ago)
Remote branch: origin/master (git@gitorious.org:sup/mainline.git)
[x] in sync with local

Feature branches:
{ } origin/release-0.8.1 is NOT merged in (1 commit ahead)
    - bump to 0.8.1 [dab43fb] (wmorgan-sup@...; 2 days ago)
[ ] labels-before-subj is NOT merged in (1 commit ahead)
    - put labels before subject in thread index view [790b64d] (marka@...; 4 weeks ago)
{x} origin/enclosed-message-display-tweaks merged in
(x) experiment merged in (only locally)

NOTE: working directory contains modified files

git-wtf 보여줍니다 :

  • 지점이 원격 지점 인 경우 추적 지점 인 경우
  • 지점이 기능 분기 인 경우 비 기능 ( "버전") 분기와 관련되는 방식입니다.
  • 지점이 기능 분기와 관련되는 방식 (버전 분기 인 경우)

% ae를 사용하여 작성자 전자 메일을 보여주는 다양한 형식의 변형을 사용했습니다. 또한 hg의 smartlog와 비슷한 "sl"로 별칭을 호출하는 것을 선호합니다.
fiorix

git-wtf도구 에 대한 링크에 대해 감사드립니다 . 매우 유용합니다. 멋진 git log나무 를 쳐다 보면 얻을 수있는 결론을 본질적으로 요약 해 놓은 것 같습니다.
Luke Davis

체크 아웃 지점에서 어떤 지점을 체크 아웃했는지 표시 할 방법을 찾고있었습니다.
Chang Zhao

@ChangZhao "부모 지점 찾기"와 비슷하며 쉽지 않습니다. stackoverflow.com/a/3162929/6309 , stackoverflow.com/a/56452713/6309
VonC

147

그것은 당신이 요구 한 것이 아니지만

git log --graph --simplify-by-decoration --pretty=format:'%d' --all

꽤 잘해. 태그와 원격 브랜치도 보여줍니다. 모든 사람에게 바람직하지는 않지만 유용하다고 생각합니다. --simplifiy-by-decoration여기에 표시된 심판을 제한하는 큰 요령이 있습니다.

비슷한 명령을 사용하여 로그를 봅니다. 내 gitk사용법 을 완전히 바꿀 수있었습니다 .

git log --graph --oneline --decorate --all

~ / .gitconfig 파일에 다음 별칭을 포함 시켜서 사용합니다.

[alias]
    l = log --graph --oneline --decorate
    ll = log --graph --oneline --decorate --branches --tags
    lll = log --graph --oneline --decorate --all

편집 : 더 간단한 옵션 플래그를 사용하도록 제안 된 로그 명령 / 별칭을 업데이트했습니다.


1
IMO는 여기에 가장 좋은 대답이지만 SourceTree 또는 gitk 등이 이런 종류의 방법이라고 생각합니다.
JaKXz

원점에 가지가 표시됩니다. 이것을 현지 지점에 표시 할 수있는 방법이 있습니까?
Jeff

교체 @Jeff --all--branches --tags아마 그것을 할 것입니다.
nocash

완벽한 답변. 내가 찾던 것은 여기에서 찾았습니다. 큰.
AMIC MING

12

다음 예제는 커밋 부모도 보여줍니다.

git log --graph --all \
--format='%C(cyan dim) %p %Cred %h %C(white dim) %s %Cgreen(%cr)%C(cyan dim) <%an>%C(bold yellow)%d%Creset'

10

라는 도구를 사용할 수 있습니다 gitk.


나는 gitk를 좋아하지만 gitkMac에서는 알아 내지 못했습니다 . 제안이 있으시면 알려주십시오. 나는 사용하기 시작 Github Desktop했지만 명령 줄에서 일하는 것을 좋아합니다.
AMIC MING

6

우분투에서 테스트 :

sudo apt install git-extras
git-show-tree

이것은 여기서 가장 많이 찬성 된 2 가지 답변과 유사한 효과를냅니다.

출처 : http://manpages.ubuntu.com/manpages/bionic/man1/git-show-tree.1.html


또한, 만약 당신이 arcanist를 설치 했다면 (수정 : Uber의 arcanist 포크가 설치되어 있습니다- 설치 지침 은이 답변의 맨 아래를 보십시오 ), arc flow업스트림 종속성의 아름다운 의존성 트리를 보여줍니다 (예 : 이전에 arc flow new_branch또는 수동으로 설정 git branch --set-upstream-to=upstream_branch).

보너스 git 트릭 :

관련 :

  1. `arc graft`와`arc patch`의 차이점은 무엇입니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.