Самые рейтинговые ответы, показывающие git log команды как любимые решения.
Если вам нужен табличный , скажем, реальный столбец, такой как вывод, вы можете использовать свои классные команды git log с небольшими изменениями и некоторыми ограничениями с помощью .gitconfig alias.bly фрагмента ниже.
Модификации:
- ты должен использовать
%><(<N>[,ltrunc|mtrunc|trunc]) перед каждым коммитом фиксации
- добавить уникальный разделитель в качестве разделителя столбцов
- добавить
--colorопцию для цветного вывода
Ограничения:
если график не должен быть помещен в первый столбец, вы не можете добавить другие символы для украшения, как (committer:, <и >)как в
...%C(dim white)(committer: %<(15,trunc)%cn%<(25,trunc)<%ce>)%C(reset)...
чтобы получить табличный вывод
Пример взят с этого сайта:
thompson1 = log --all --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
будет с ^разделителем и без добавленных символов
thompson1-new = log --all --graph --color --abbrev-commit --decorate --format=format:'^%C(bold blue)%<(7,trunc)%h%C(reset)^%C(bold green)%<(21,trunc)%ar%C(reset)^%C(white)%<(40,trunc)%s%C(reset)^%C(dim white)%<(25,trunc)%an%C(reset)^%C(auto)%d%C(reset)'
который сравнивает как

или с перемещением графика в столбец 5

Для этого добавьте следующее в ваш .gitconfig и назовите псевдоним журнала с помощью
git tably YourLogAlias
[color "decorate"]
HEAD = bold blink italic 196
branch = 214
tag = bold 222
[alias]
# delimiter used as column seperator
delim = ^
# example thompson1
thompson1 = log --all --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%C(reset)'
# modified thompson1 example
thompson1-new = log --all --graph --color --abbrev-commit --decorate --format=format:'^%C(bold blue)%<(7,trunc)%h%C(reset)^%C(bold green)%<(21,trunc)%ar%C(reset)^%C(white)%<(40,trunc)%s%C(reset)^%C(dim white)%<(25,trunc)%an%C(reset)^%C(auto)%d%C(reset)'
# set a column for the graph
thompson1-new-col = 1
tably = !bash -c '" \
delim=$(git config alias.delim); \
git_log_cmd=$(git config alias.$1); \
git_tre_col=${2:-$(git config alias.$1-col)}; \
\
i=0; \
while read -d\"$delim\" -r col_info;do \
((i++)); \
col_length[$i]=$(grep -Eo \"\\([0-9]*,[lm]*trunc\\)\" <<< \"$col_info\" | grep -Eo \"[0-9]*\" | head -n 1); \
done <<< \"$(grep -Eo \"(pretty|format)=format.*\" <<< \"$git_log_cmd$delim\")\"; \
\
while IFS= read -r graph;do \
chars_count=$(sed -nl1000 \"l\" <<< \"$graph\" | grep -Eo \"\\\\\\\\\\\\\\\\|\\||\\/|\\ |\\*|_\" | wc -l); \
[[ ${chars_count:-0} -gt ${col_length[1]:-0} ]] && col_length[1]=$chars_count; \
done < <([[ -n \"$(grep -F graph <<< \"$git_log_cmd\")\" ]] && git log --all --graph --pretty=format:\" \" && echo); \
\
while IFS= read -r line;do \
j=0; \
while IFS= read -d\"$delim\" -r col_content;do \
((j++)); \
if [[ $j -eq 1 ]];then \
chars=$(sed -nl1000 \"l\" <<< \"$col_content\" | grep -Eo \"\\\\\\\\\\\\\\\\|\\||\\/|\\ |\\*|_\" | wc -l); \
whitespaces=$((${col_length[1]}-$chars)); \
whitespaces=$(seq -s\" \" $whitespaces|tr -d \"[:digit:]\"); \
col_content[1]=\"${col_content[1]}$col_content$whitespaces\n\"; \
else \
col_content[$j]=\"${col_content[$j]}$(printf \"%${col_length[$j]}s\" \"$col_content\") \n\"; \
fi; \
done <<< \"$line$delim\"; \
for ((k=$j+1;k<=$i;k++));do \
col_content[$k]=\"${col_content[$k]}$(printf \"%${col_length[$k]}s\" \"\") \n\"; \
done; \
done < <(git $1 && echo); \
\
while read col_num;do \
if [[ -z \"$cont_all\" ]];then \
cont_all=${col_content[$col_num]}; \
else \
cont_all=$(paste -d\" \" <(echo -e \"$cont_all\") <(echo -e \"${col_content[$col_num]}\")); \
fi; \
done <<< $(seq 2 1 ${git_tre_col:-1};seq 1;seq $((${git_tre_col:-1}+1)) 1 $i); \
echo -e \"$cont_all\"; \
"' "git-tably"
Это более или менее только часть моего ответа https://stackoverflow.com/a/61487052/8006273, где вы можете найти более глубокие объяснения, но здесь тоже хорошо подходит этот вопрос.