Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Git中提交之前修补所有更改的文件_Git - Fatal编程技术网

如何在Git中提交之前修补所有更改的文件

如何在Git中提交之前修补所有更改的文件,git,Git,在提交更改的文件之前,我需要删除所有尾随空格。问题是如何做到这一点?Git在默认情况下会警告尾随空格,并且可以配置为拒绝添加空格错误的提交 删除空白只能通过更改文件和重做git add阶段来实现——虽然可以在添加时自动执行此操作,但这会留下一个与所暂存的不同的工作树,因此文件在git status输出中仍然显示为“已更改但未更新” 删除尾随空格的最简单方法是 sed -i -e 's/[:blank:]*$//' file.c ... 我不认为有一种好方法可以在提交时自动删除尾随空格(如果可以

在提交更改的文件之前,我需要删除所有尾随空格。问题是如何做到这一点?

Git在默认情况下会警告尾随空格,并且可以配置为拒绝添加空格错误的提交

删除空白只能通过更改文件和重做
git add
阶段来实现——虽然可以在添加时自动执行此操作,但这会留下一个与所暂存的不同的工作树,因此文件在
git status
输出中仍然显示为“已更改但未更新”

删除尾随空格的最简单方法是

sed -i -e 's/[:blank:]*$//' file.c ...

我不认为有一种好方法可以在提交时自动删除尾随空格(如果可以的话,我也不认为这样做是个好主意)

我以前使用过一个钩子来拒绝添加尾随空格的提交,这对我来说很好;创建/添加以下内容到
.git/hooks/pre-commit
,并使其可执行:

# Work out what to diff against
if git rev-parse --verify HEAD >/dev/null 2>&1
then
    against=HEAD
else
    # Initial commit: diff against an empty tree object
    against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --

最终,我决定为此编写gitadd命令

#!/bin/bash


# Number of arguments passed
argc=$#


if [ $argc -eq 0  ]; then
        argv=( $(git diff --name-only HEAD) )
else
        argv=( $@ )
fi

for file in "$argv"; do

        sed -i -e 's/^[[:blank:]]\+$//' $file

        git add $file # stage patched file

done

在适当的时候考虑接受你的一些问题的答案。您可以通过单击每个问题正确答案旁边的复选标记来完成此操作。