programing

트리와 같은 방식으로 Git branch

padding 2023. 6. 27. 21:50
반응형

트리와 같은 방식으로 Git branch

지금은 "git branch"를 입력하면

내 가지를 임의의 순서로 나열합니다.

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

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

여기서 foo & bar는 마스터에서 분기되었고, foo1 & foo2는 foo에서 분기되었으며, bar4는 bar에서 분기되었습니다.

이것은 쉽게 달성할 수 있습니까?

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

아래 답변은 다음을 사용합니다.

2009년에 "터미널에서 깃 트리를 표시할 수 없음"과 유사한 접근 방식을 언급했습니다.

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

기본적으로 분기와 해당 커밋은 시간순 역순으로 표시됩니다.
이 옵션을 사용하면 이러한 사용자가 토폴로지 순서로 나타납니다(즉, 하위 커밋이 부모 앞에 표시됨).

하지만 도구 gitwtf도움이 될 수 있습니다.예:

$ 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표시:

  • 원격 repo와 분기의 관계(추적 분기인 경우)
  • 분기가 피쳐 분기인 경우 비 피쳐("버전") 분기와 관련된 방식입니다.
  • 버전 분기인 경우 분기가 피쳐 분기와 관련된 방식

당신이 요청한 것은 아니지만,

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

편집: 제안된 로그 명령/에일리어스가 더 간단한 옵션 플래그를 사용하도록 업데이트되었습니다.

TLDR; 사용git show-tree또는git lg별칭(내가 선호하는 선택).

트리 보기에 모든 분기(원격 분기 포함)를 표시하는 방법

사용하다git show-tree:

참고:git show-tree코어의 일부가 아님git"git-extra"로 알려진 추가 유틸리티로 설치해야 합니다.Linux Ubuntu에서 사용할 수 있는 기능은sudo apt install git-extras여기에 있는 설치 지침에서 운영 체제를 찾아 git-extra 설치 지침을 따릅니다.

Ubuntu에서 테스트됨:

# Install it
sudo apt install git-extras

# Run it:
git-show-tree
# OR (same thing)
git show-tree

이는 여기서 가장 많이 투표된 2개의 답변과 유사한 효과를 생성합니다.

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

예:

man git show-tree.

모든 분기에 대한 커밋 기록 로그를 트리 보기로 출력합니다.

*   4b57684 (HEAD, develop) Merge branch upstream master.
|\
| *   515e94a Merge pull request #128 from nickl-/git-extras-html-hyperlinks
| |\
| | * 815db8b (nickl/git-extras-html-hyperlinks, git-extras-html-hyperlinks) help ronn make hyperlinks.
| * | 7398d10 (nickl/develop) Fix #127 git-ignore won´t add duplicates.
| |/
| | * ab72c1e (refs/stash) WIP on develop: 5e943f5 Fix #127 git-ignore won´t add duplicates.
| |/
|/|
* | 730ca89 (bolshakov) Rebase bolshakov with master
|/
* 60f8371 (origin/master, origin/HEAD, master) Merge pull request #126 from agrimaldi/fix-changelog-last-tag
* 9627780 (tag: 1.7.0) Release 1.7.0
* 2e53ff6 (tag: 1.6.0) Release 1.6.0
* bbd32d8 (tag: 1.5.1) Release 1.5.1
| * 6b6b758 (nickl/gh-pages, gh-pages) add example git-extras to gh-pages
| * 19cfd11 (origin/gh-pages) Index page
| | * 881a70e (tag: 1.5.0) Release 1.5.0
| |/
|/|
* | 4db5ee0 (tag: 1.4.0) Release 1.4.0
* | 9b0bc89 (tag: 1.3.0) Release 1.3.0
* | be49961 (tag: 1.2.0) Release 1.2.0
* | c1d2dfc (tag: 1.1.0) Release 1.1.0
* | 4a56adb (tag: 1.0.0) Release 1.0.0
* | 948308b (tag: 0.9.0) Release 0.9.0
* | 40b131d (tag: 0.8.1) Release 0.8.1
* | 391431d (tag: 0.8.0) Release 0.8.0

에 다은의샘출다니입력플음의 .git show-tree아두파일럿 레포에서:

enter image description here


또한, 아크나리스트가 설치되어 있는 경우(수정:Uber의 아카니스트 포크가 설치되었습니다. 설치 지침은 여기 제 답변의 하단을 참조하십시오.arc flow를 보여줍니다, 이전에 종아즉종의트업운름보속, 트종다는니리여줍성속설리를성된정스다림트성속이, 에전▁of즉종트성리는▁shows▁depend▁a속ency▁upstream▁set▁previous▁were▁(▁depend▁treeieencieslyarc flow new_branch또는 를 통해 수동으로git branch --set-upstream-to=upstream_branch는 다음과 같습니다.arc flow:

master                              
└──graft-D999
   └──new_feature_1
      └──new_feature_2 

나는 정말로 발견합니다.arc flow 유용하게에 저는 이것(비활성이고 아직을 있습니다.git tree가 행동을 복제할 계획인 오픈 소스 프로젝트: https://github.com/ElectricRCAircraftGuy/git-tree .

하나의 가지를 "트리와 같은" 방식으로 표시하려면:

# Show the currently-checked-out branch
git lg

# OR: show branch_name
git lg branch_name

추가할 수 있습니다.-p또는--patch변경된 라인도 표시합니다.

git lg -p
# OR
git lg --patch

별칭을 설치하려면(출처: https://coderwall.com/p/euwpig/a-better-git-log) :

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

레포의 포크, 병합 및 기타 항목을 보여주는 출력 예:

enter image description here

보너스 기트 트릭:

관련:

  1. 아크 그라프트와 아크 패치의 차이점은 무엇입니까?

다음 예제에서는 커밋 상위 항목도 보여 줍니다.

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'

다음과 같은 도구를 사용할 수 있습니다.gitk.

Github을 사용하는 사람들을 위해, 그들은 읽기 더 쉬워 보이는 지점 네트워크 뷰어를 가지고 있습니다.

저는 바로 그렇게 하는 간단한 CLI를 만들고 그것을 양조하기 위해 넣었습니다.

언급URL : https://stackoverflow.com/questions/2421011/output-of-git-branch-in-tree-like-fashion

반응형