Git在提交之前比较文件

时间:2012-06-11 23:30:51

标签: git github github-for-windows

git中是否有一项功能可以在提交更改之前将我的本地文件与git源代码控件进行比较?

4 个答案:

答案 0 :(得分:51)

当然可以。

  1. 使用不带任何参数的git diff命令: 将比较文件系统中的每个已修改文件与当前签出分支(或)标记中的文件。

  2. 使用git diff <tag(or)branch name>: 将比较文件系统中的每个已修改文件与指定分支(或)标记中的文件。

  3. 使用git diff <path/to/file_name (or) path/to/folder>: 将比较当前签出的分支(或)标记中文件系统文件夹中的指定文件。

  4. 使用git diff <tag1(or)branch1 name> <tag2(or)branch2 name>: 将比较两个分支/标签之间的所有修改文件。

  5. 有很多选项,您可以传递给'git diff'命令来格式化输出。这里我列举了一些:

    • git diff --name-only:仅显示已更改文件的名称,而不显示内容。
    • git diff --name-status:仅显示已更改文件的名称和状态。
    • git diff --cached (or --staged):仅比较暂存/编入索引的文件。

    了解更多信息:在你的git bash中执行git diff --help

    FYI:git diff将在命令行中生成输出。如果要在某些可视化工具中查看输出,请使用git difftool

    使用 git difftool :您可以配置git以使用差异/合并工具来比较文件。 查看此链接:use Winmerge inside of Git to file diff

    您也可以将所有git diff参数和选项传递给git difftool

答案 1 :(得分:11)

我喜欢用

git status

它会显示哪些文件已更改以及您要跟踪的内容。 然后你可以使用

git diff

或更友好的GUI

gitk

要查看差异。

答案 2 :(得分:1)

我更喜欢使用这种方法。

用于比较的脚本

    #!/bin/sh
(                              # execute in a subshell so you can continue
                               #   working in the current shell
    set -o xtrace              # bash setting that echos each command before it's executed
    > /tmp/auto_bcompare_log   # truncate existing log file
    BCOMP_PATH=/usr/bin/bcompare
    BRANCH="$1"                # get branch argument from command line
    TEMPDIR=`mktemp -d`        # get a temp directory
    CWD=`pwd`                  # remember the current directory
    git clone $CWD $TEMPDIR
    cd $TEMPDIR
    git checkout $BRANCH
    cd $CWD
    $BCOMP_PATH $CWD $TEMPDIR
    rm -rf $TEMPDIR
) >> /tmp/auto_bcompare_log 2>&1 < /dev/null & # background and redirect
                                               # stdout/stderr/stdin

上面的脚本肯定是 _not_由我写的。我从网上拿走了它,但不确定消息来源。将其作为compare.sh保存在您的仓库中。确保为bcompare文件指定正确的路径。

用于提交前的比较。

./compare.sh <branch_you_want_to_compare>

这个脚本基本上做的是,它将你作为参数提供的分支签出到临时目录,然后打开以与你的pwd进行比较。 有了这个,您可以在提交之前查看您的更改。我希望这就是你想要的。

答案 3 :(得分:-2)

由于提交在推送之前很容易修改/更改,因此我发现提交更容易,然后在日志中查看我更改的内容。

如果不是我期望的那样,修改,重置,改造-i等......