Git 在提交前比较文件

Posted

技术标签:

【中文标题】Git 在提交前比较文件【英文标题】:Git Compare files before commit 【发布时间】:2012-06-14 20:51:09 【问题描述】:

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

【问题讨论】:

您是否正在尝试将您的本地 git 存储库与远程 github 存储库进行比较? 是的,类似于 VS.NET TFS,您可以在将所有更改的文件全部签入之前对其进行比较。 Git: How to view file diff before commit的可能重复 【参考方案1】:

当然可以。

    使用不带任何参数的git diffcommand: 会将文件系统中每个修改过的文件与当前签出分支(或)标签中的文件进行比较。

    使用git diff <tag(or)branch name>: 会将文件系统中每个修改过的文件与指定分支(或)标签中的文件进行比较。

    使用git diff <path/to/file_name (or) path/to/folder>: 会将文件系统中文件夹中的一个或多个指定文件与当前签出的分支(或)标签进行比较。

    使用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 bash 中执行 git diff --help

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

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

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

【讨论】:

有没有办法在 Github 上做同样的事情?【参考方案2】:

我喜欢用

git status

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

git diff

或者更友好的图形界面

gitk

查看差异。

【讨论】:

此外,如果您想检查已暂存的内容(在索引中),您可以使用 git diff --cached。【参考方案3】:

我更喜欢使用这种方法。

比较脚本

    #!/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 &lt;branch_you_want_to_compare&gt; 有何不同? kostix:它只会为您提供统一的差异格式。不像超越比较那样干净的比较。【参考方案4】:

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

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

【讨论】:

以上是关于Git 在提交前比较文件的主要内容,如果未能解决你的问题,请参考以下文章

git 对比两个分支差异

在 GitLab 上,如何比较两个不同提交的文件

工作中比较常用的git命令

Git-实验报告

Git提交文件步骤

在 git 中,如何将文件恢复到 3 次提交前?