我正在尝试为我的.gitconfig
添加一个别名,该别名将自动将当前存储库中的所有修改文件添加到提交消息中。
我尝试使用git status --porcelain
和cut
处理awk
的输出。
我有awk
可以工作,但是我确信有更好的解决方案可以产生更好的提交消息。
# in my .gitconfig
g = !git commit --all --message "edited:$(git status --porcelain | awk '{printf \"%s%s\",(NR>1?\",\":\"\"),$2} END{print \"\"}')"
# on the command-line
git commit --all --message "edited:$(git status --porcelain | awk '{printf \"%s%s\",(NR>1?\",\":\"\"),$2} END{print \"\"}')"
在git log
中,我看到诸如edited:dir1/file1,dir2/file2
之类的提交消息。
我想清理代码和/或改进提交消息。
答案 0 :(得分:4)
该信息已在您的提交中提供。您只需运行git log --stat
即可看到它。
我经常使用它,所以我在.gitconfig
中为其定义了别名:
[alias]
ls = log --stat
因此,每当我使用git ls
时,我都会得到统计信息输出。
答案 1 :(得分:0)
如果将命令行界面用于git commit
(默认行为),则只需取消注释Git已经生成的相关行。搜索带有Changes to be commited
的行,在该行下应有表明文件已修改/添加/删除/移动的行。
答案 2 :(得分:0)
我想出了一种完全可以实现我想要的解决方案,但是这很可怕。
这是我的.gitconfig
中的样子:
g = "!f() { git commit -am \"$(echo $@)\" && git push; }; f" "$([ -z \"$(git status --porcelain | grep '^\\s\\?A\\s')\" ] || git status --porcelain | grep '^\\s\\?A\\s' | awk 'BEGIN{print \"Added:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?C\\s')\" ] || git status --porcelain | grep '^\\s\\?C\\s' | awk 'BEGIN{print \"Copied:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?D\\s')\" ] || git status --porcelain | grep '^\\s\\?D\\s' | awk 'BEGIN{print \"Deleted:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?M\\s')\" ] || git status --porcelain | grep '^\\s\\?M\\s' | awk 'BEGIN{print \"Modified:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')" "$([ -z \"$(git status --porcelain | grep '^\\s\\?R\\s')\" ] || git status --porcelain | grep '^\\s\\?R\\s' | awk 'BEGIN{print \"Renamed:\"} {printf \"%s%s\",(NR>1?\", \":\"\"), $2} END{print \"\"}')";
对不起,如果我的问题不清楚。
这个想法是我可以在{p>中键入git g
示例提交消息:
Added: file1, file2 Deleted: trash, rubbish Modified: work_in_progress