Git提交前比较文件

33

在提交更改之前,Git 中是否有一种功能可以将本地文件与 Git 源代码进行比较?


你是否正在尝试将本地的git仓库与远程的github仓库进行比较? - user849425
是的,类似于VS.NET TFS,您可以在全部检入之前比较所有更改的文件。 - mallows98
可能是重复的问题:Git:如何在提交之前查看文件差异 - kenorb
4个回答

65

当然可以。

  1. 使用没有参数的 git diff 命令: 将比较文件系统中每个修改过的文件与当前检出的分支(或标签)中的文件。

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

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

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

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

  • git diff --name-only:只显示更改文件的名称,而不是内容。
  • git diff --name-status:仅显示更改文件的名称和状态。
  • git diff --cached(或--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


我能在Github上以相同的方式做吗? - Jean

12

我喜欢使用

git status

它会显示哪些文件已更改以及您正在跟踪什么。 您随后可以使用

git diff

或者更适合GUI用户的

gitk

查看差异。


2
另外,如果您想检查已暂存的内容(在索引中),可以使用 git diff --cached 命令。 - Russell

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

以上脚本绝对不是我写的。我从网络上找到它,但不确定来源。请将其保存在您的存储库中,命名为compare.sh。确保为bcompare文件提供正确的路径。
用于提交前比较。
./compare.sh <branch_you_want_to_compare>

这个脚本的基本功能是,它会将你作为参数提供的分支检出到一个临时目录,并打开以便与你的当前工作目录进行比较。通过这种方式,你可以在提交之前审查你的更改。我希望这正是你想要的。

哦,那跟 git diff <branch_you_want_to_compare> 有什么不同吗? - kostix
kostix:它只会以统一的差异格式呈现给你。不像Beyond Compare那样进行干净的比较。 - positron

-3

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

如果不是我期望的内容,则进行修改、重置、交互式变基等操作...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接