30

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

4

4 回答 4

62

你当然可以。

  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>: 将比较两个分支/标签之间的所有修改文件。

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

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

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

仅供参考:git diff将在命令行中生成输出。如果您想在某些可视化工具中查看输出,请使用git difftool.

使用git difftool:您可以将 git 配置为使用 diff/merge 工具来比较文件。签出此链接:在 Git 中使用 Winmerge 归档差异

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

于 2012-06-12T07:21:17.473 回答
12

我喜欢用

git status

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

git diff

或者更友好的 GUI

gitk

要查看差异。

于 2012-06-11T23:40:36.750 回答
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>

该脚本的基本作用是,它检查您作为参数提供给临时目录的分支,并打开以与您的密码进行比较。有了这个,您可以在提交之前查看您的更改。我希望这是你想要的。

于 2012-06-12T03:53:27.597 回答
-3

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

如果这不是我所期望的,修改,重置,rebase -i 等......

于 2012-06-11T23:38:47.177 回答