git commit -v默认情况下


68

默认情况下,如何配置git commit为充当git commit -v(显示已提交的完整差异)?

使用别名不是很令人满意,因为它不会影响可能间接提交的操作期间的提交消息编辑git rebase

Answers:



30

据我所知,您不能使用别名覆盖已经存在的git命令(否则,将无法执行原始命令,并且一堆东西会中断)。

因此,我建议您做类似的事情git config --global "alias.ci" "commit -v"。这将在您的~/.gitconfig文件中添加一行,并使其git ci生效git commit -v。然后,您应该养成键入git ci而不是输入的习惯git commit(除非您决定不使用-v)。


8
我接受您的回答,因为这是我所见过的最好的解决方案,但是似乎我的问题的实际答案是“不,没有办法将git commit设置为default到verbose” –注意,这不是与“破坏东西”相同,就像用另一个命令替换任意命令一样。
凯文·里德

1
我懂了。我认为可能没有配置选项可以执行此操作。但是所有配置选项在git-config手册页中都有大量记录,并且我在那里看不到任何可能让您执行此操作的东西(如果愿意,可以再次检查一下自己)。因此,我认为没有办法直接git commit做到git commit -v
2011年

1
作为v1.8.4-RC1的,不存在这样的配置选项(见内建/ commit.c,所述verbose全球仅通过设置OPT__VERBOSE选项)
DBR

有人写了一个补丁程序将此添加为git的配置选项,但没有人接受。
约旦

9

好吧,我使用别名:

alias gc='git commit -v'

我相信,有一堆不错的别名,就像我从PeepCode git截屏视频中得到的一样。


5
@MatrixFrog:git gc是一个Git命令,gc本身不执行任何操作。
rappard

3
是的,没关系。您的意思是常规别名,而不是git别名。既然我实际上正在注意,这是显而易见的。:P
MatrixFrog 2011年

6

我知道这是一个古老的问题,但我碰巧遇到了这个问题并得到了答案。我将以下函数放在.bash_profile中:

#!/bin/bash                                                                            

git()                                                                                  
{                                                                                      
    case "$1" in                                                                       
        ci|commit)
        gitargs=""
        for i in $@; do
            if [ "$1" != "$i" ]; then                                                  
                gitargs="$gitargs $i"
            fi  
        done
        command git commit -v $gitargs
        ;;  
    *)  
        command git "$@"
        ;;                                                                             
    esac                                                                               
}

这变成git了一个bash函数,该函数转换git commitgit commit -v其余参数,而其余大部分则单独保留。但是,它会破坏git commit带有空格的参数,并且不允许您提交名为ci或的文件commit


如果git-commit有自己的单独命令,那将是很好的选择,这样就可以覆盖它。
kzh

4

我刚刚向发送了一封电子邮件,git@vger.kernel.org并收到以下回复:

2016年5月4日16:47,普拉尼特·鲍瓦(Pranit Bauva):在2016年4月5日,星期二,晚上8:08,贾瑟克·维尔伯瑞克写道:

你好,

我要这个是因为这个功能引起了很多人的兴趣(包括我在内),并且没有方便的解决方法:

git commit -v默认情况下

干杯,d33tah

目前正在进行中。我就是正在努力的人。其中一个修补程序当前在pu分支上。我仍在完善它,以包含更多内容。您可以通过git维护者阅读git.git消息来跟踪其状态。该修补程序的最新版本位于http://thread.gmane.org/gmane.comp.version-control.git/288820

谢谢,Pranit Bauva


1
优秀的!感谢您的更新和链接。如果将其发布到将来的发行版中,那么我一定会在这里更新接受的答案-无论如何,只要我不习惯检查git发行说明,便会立即注意到。如果您听到更多,请轻推我!
凯文·瑞德

@KevinReid:今天您可以随时申请补丁;)
d33tah 2016年

1

愚蠢的解决方法: :!git log -1 -u


2
如前所述,这没有帮助。打开编辑器后,git log -1 -u将显示HEAD补丁,而不是当前提交的补丁。就是说,git diff HEAD做到了。嗯,我应该检查一下在变基过程中会发生什么。
凯文·里德

2
不幸的是,它并没有泛化。例如,在rebase中squash,这是我最感兴趣的情况,它必须是git diff HEAD~n。知道以任何方式获取正在进行的特定提交操作的区别吗?
凯文·里德

1

下面的.bashrc/.profile似乎可以完成工作:

git() {
    if [[ "$1" = "commit" ]]; then
        shift
        command git commit -v "$@"
    else
        command git "$@"
    fi
}

感谢@boshvark的启发。不知道您的空白问题是什么,但这似乎没有任何问题。
阿曼德

1
这对像重新定级期间这样的间接提交无济于事。
凯文·里德

有趣的一点。也许是时候向git提交补丁了。
Armand
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.