Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在执行'git log--graph'时折叠分支?_Git - Fatal编程技术网

如何在执行'git log--graph'时折叠分支?

如何在执行'git log--graph'时折叠分支?,git,Git,使用git log--graph时,是否可以折叠完全合并的分支 而不是使用git log--graph--branchs显示: * 16bb2c5 (HEAD, dev) Merge branch f |\ | * 4571fbd Commit 14 | * de845ac Commit 13 |/ | * aba23a5 (branch e) Commit 12 |/ * 305d031 Merge branch c |\ | | * 80c47c6 (branch d) Commit

使用
git log--graph
时,是否可以折叠完全合并的分支

而不是使用
git log--graph--branchs
显示:

*   16bb2c5 (HEAD, dev) Merge branch f
|\
| * 4571fbd Commit 14
| * de845ac Commit 13
|/
| * aba23a5 (branch e) Commit 12
|/
*   305d031 Merge branch c
|\
| | * 80c47c6 (branch d) Commit 11
| | * dbc182e Commit 10
| | * 18bb013 Commit 9
| |/
| * 879e64a Commit 8
| * b9a1413 Commit 7
| * ddd92f9 Commit 6
|/
*   2e94cc8 Merge branch b
|\
| * 852ddaf Commit 5
| * 88cdaf9 Commit 4
| * d1d7c7b Commit 3
|/
| * bd1557a (branch a) Commit 2
|/
o e740474 (master) Commit 1
由于分支
a
c
已完全合并(并已删除,因此
--分支
不会尝试显示它们),我希望(有或没有
#折叠的
注释):


我的用例如下。我希望有一个别名来显示本地分支列表中所有我尚未合并的本地提交,从master开始,除非它们不是dev的第一个父级(递归)的后代。EDIT:目标是区分已集成的和仍在研究中的

请注意,
git log--graph--branchs--first parent
显示我想要的所有提交,但不包括所有提交的所有可见父级之间的链接(
879e64a Commit 8
没有链接为
305d031 Merge branch c
的第二个父级)

我还没有推送的所有本地提交


您的查询可能有一个精确的答案,但您应该避免本地提交未被推送。依靠这些未经催促的承诺来避免松散的工作似乎不是一个可持续的解决方案

一个更好的策略可以是比较分支机构,并将这些信息作为决定需要整合什么的基础

这样你可以推动一切(是的,现在安全了)


前/后 你可以结账

一些在线工具“免费”为您提供每个分支机构的领先/落后信息:


我找到了一种简单的方法(它支持颜色)

我在
~/.gitconfig

graph = !sh -c '~/scripts/gitgraph --boundary master..  "$@"' -
我在
~/scripts/gitgraph

#!/usr/bin/env sh
# Display a graph of all umerged branches
# All arguments will be passed to git log

# Use color if output is not connected to a terminal
COLOR=''
[ -t 1 ] && COLOR='--color'

# Note: each ASCII_CODES create two capture group
ASCII_CODES="$(printf "\\\\(\\\\(\033\\\\[[^m]*m\\\\)*\\\\)")"·

#1: Replace color of |\ and |/
#2: Display first-parents
#3: Display non-merged commits whitch aren't first-parents
#4: Replace commit message of merged commits witch aren't first parents with "..."
#uniq: Squash multiples consecutive lines created by #4
git log --graph --oneline --decorate --branches ${COLOR} "$@" | sed -n \
    -e "s/^${ASCII_CODES}|${ASCII_CODES}\\([\\\\\\/]\\)${ASCII_CODES} */\\1|\\5\\6/p" \
    -e "/^${ASCII_CODES}|${ASCII_CODES}\\\\/ , /^${ASCII_CODES}|${ASCII_CODES}\\// "'!p' \
    -e "/^${ASCII_CODES}|${ASCII_CODES}\\\\/ , /^${ASCII_CODES}|${ASCII_CODES}\\// { /^${ASCII_CODES}|${ASCII_CODES} \\*/"' !p }' \
    -e "/^${ASCII_CODES}|${ASCII_CODES}\\\\/ , /^${ASCII_CODES}|${ASCII_CODES}\\// { s/^${ASCII_CODES}|${ASCII_CODES} \\*.*/\\1| ...\\3/p }" \
| uniq 
示例(注意:前缀#1到#4对应于sed中修改它的行)

将成为

* 87842c1 Commit 17
* 1ab18c1 Commit 16
*   16bb2c5 (HEAD, dev) Merge branch f
|\
| * 4571fbd Commit 15
| * de845ac Commit 14
|/
| * 12afeee (branch e) Commit 13
| * aba23a5 Commit 12
|/
*   305d031 Merge branch c
|\
| | * 80c47c6 (branch d) Commit 11
| | * dbc182e Commit 10
| | * 18bb013 Commit 9
| |/
| * ...
|/
*   2e94cc8 Merge branch b


“你应该避免没有推送的本地提交。依靠这些未推送的提交来避免松散的工作似乎不是一个可持续的解决方案。”我的整个主目录已经在网络上备份,所以我根本不依赖git来备份未完成的工作。不幸的是,您的解决方案对我没有帮助,因为我想要的是将集成/共享的内容与仍在进行中的内容进行比较。我并不真正关心提交的数量,而是那些提交的内容(以及提交消息)。此外,如果我只想推送所有内容以确保它存在于其他地方,我可以只做
git推送--all
这里的简短答案是否定的,你不能用
--graph
得到你想要的东西,因为它坚持在图中行走。您可以简化它与
--第一个父项
--装饰简化
等一起运行的图形,但这将省略一些您想要的项。考虑运行<代码> Git FETCH < /C>,然后使用<代码> Git日志或<代码> GIT-Rev列表 >代码>分支-非-Reists<代码>,它简单地枚举所有由本地分支名称而不是远程跟踪名称可获得的提交。@ ToRok有一种方法将给定的提交列表作为图表显示出来,类似于git log--graph--只有那些提交commit1 commit2 commit3?从技术上讲,
git log--branchs--first parent--pretty='%H'master..
返回我想要的提交列表,但我不知道如何将它们显示为图形。
git log
-n1
--max count 1
)选项不起作用。如果列出多个提交,它将只显示第一个提交。不使用
git log--graph
。它的内部代码相当俗气。你可以使用其他的图形绘制程序(例如,典型的“点”)来绘制各种各样的东西。非常感谢你提供的信息。如果我真的想创建我的别名,我想我必须编写一些代码!顺便说一下,请看。
#!/usr/bin/env sh
# Display a graph of all umerged branches
# All arguments will be passed to git log

# Use color if output is not connected to a terminal
COLOR=''
[ -t 1 ] && COLOR='--color'

# Note: each ASCII_CODES create two capture group
ASCII_CODES="$(printf "\\\\(\\\\(\033\\\\[[^m]*m\\\\)*\\\\)")"·

#1: Replace color of |\ and |/
#2: Display first-parents
#3: Display non-merged commits whitch aren't first-parents
#4: Replace commit message of merged commits witch aren't first parents with "..."
#uniq: Squash multiples consecutive lines created by #4
git log --graph --oneline --decorate --branches ${COLOR} "$@" | sed -n \
    -e "s/^${ASCII_CODES}|${ASCII_CODES}\\([\\\\\\/]\\)${ASCII_CODES} */\\1|\\5\\6/p" \
    -e "/^${ASCII_CODES}|${ASCII_CODES}\\\\/ , /^${ASCII_CODES}|${ASCII_CODES}\\// "'!p' \
    -e "/^${ASCII_CODES}|${ASCII_CODES}\\\\/ , /^${ASCII_CODES}|${ASCII_CODES}\\// { /^${ASCII_CODES}|${ASCII_CODES} \\*/"' !p }' \
    -e "/^${ASCII_CODES}|${ASCII_CODES}\\\\/ , /^${ASCII_CODES}|${ASCII_CODES}\\// { s/^${ASCII_CODES}|${ASCII_CODES} \\*.*/\\1| ...\\3/p }" \
| uniq 
#1 * 87842c1 Commit 17
#1 * 1ab18c1 Commit 16
#1 *   16bb2c5 (HEAD, dev) Merge branch f
#2 |\
#4 | * 4571fbd Commit 15
#4 | * de845ac Commit 14
#2 |/
#3 | * 12afeee (branch e) Commit 13
#3 | * aba23a5 Commit 12
#2 |/
#1 *   305d031 Merge branch c
#2 |\
#3 | | * 80c47c6 (branch d) Commit 11
#3 | | * dbc182e Commit 10
#3 | | * 18bb013 Commit 9
#3 | |/
#4 | * 879e64a Commit 8
#4 | * b9a1413 Commit 7
#4 | * ddd92f9 Commit 6
#2 |/
#1 *   2e94cc8 Merge branch b
* 87842c1 Commit 17
* 1ab18c1 Commit 16
*   16bb2c5 (HEAD, dev) Merge branch f
|\
| * 4571fbd Commit 15
| * de845ac Commit 14
|/
| * 12afeee (branch e) Commit 13
| * aba23a5 Commit 12
|/
*   305d031 Merge branch c
|\
| | * 80c47c6 (branch d) Commit 11
| | * dbc182e Commit 10
| | * 18bb013 Commit 9
| |/
| * ...
|/
*   2e94cc8 Merge branch b