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 diff
command:
会将文件系统中每个修改过的文件与当前签出分支(或)标签中的文件进行比较。
使用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 <branch_you_want_to_compare>
有何不同?
kostix:它只会为您提供统一的差异格式。不像超越比较那样干净的比较。【参考方案4】:
由于提交在推送之前很容易修改/更改,因此我发现提交更容易,然后在日志中查看我更改的内容。
如果不是我所期望的,请修改、重置、rebase -i 等...
【讨论】:
以上是关于Git 在提交前比较文件的主要内容,如果未能解决你的问题,请参考以下文章