是否有可能要求git diff在其diff输出中包括未跟踪的文件,或者我最好的选择是使用git添加新创建的文件和我编辑过的现有文件,然后使用:
git diff --cached
?
是否有可能要求git diff在其diff输出中包括未跟踪的文件,或者我最好的选择是使用git添加新创建的文件和我编辑过的现有文件,然后使用:
git diff --cached
?
当前回答
在最新的git版本中,您可以git add -N the file(或——intent-to-add),这将在该位置的索引中添加一个零长度的blob。结果是,您的“未跟踪”文件现在变成了一个修改,将所有内容添加到这个零长度文件中,并显示在“git diff”输出中。
git diff
echo "this is a new file" > new.txt
git diff
git add -N new.txt
git diff
diff --git a/new.txt b/new.txt
index e69de29..3b2aed8 100644
--- a/new.txt
+++ b/new.txt
@@ -0,0 +1 @@
+this is a new file
不幸的是,正如所指出的,当你有一个——intent-to-add文件挂起时,你不能git stash。虽然如果你需要隐藏,你只需要添加新文件,然后隐藏它们。或者您可以使用仿真解决方案:
git update-index --add --cacheinfo \
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 new.txt
(在这里设置别名是你的朋友)。
其他回答
使用可以暂存新文件和区分暂存文件的想法,您可以将这两者结合起来查看差异,我发现它使用起来很简单。
添加您想要查看差异的文件。在您的情况下,只添加未跟踪的文件。您可以选择只添加那些想要查看差异的文件。 Git stash && Git添加。git隐藏pop 不同的阶段 Git diff——阶段性的 如果需要,重置暂存文件 git重置
综上所述,
git stash && git add . && git stash pop && git diff --staged && git reset
对于一个文件:
git diff --no-index /dev/null new_file
对于所有新文件:
for next in $( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null $next; done;
别名:
alias gdnew="for next in \$( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null \$next; done;"
对于所有修改和新文件组合为一个命令:
{ git --no-pager diff; gdnew }
git add -A
git diff HEAD
生成补丁,如果需要,然后:
git reset HEAD
通常,当我与远程位置团队一起工作时,在我遵循git阶段untrack- > staging ->commit之前,我事先了解其他团队在同一个文件中所做的更改对我来说很重要 为此,我写了一个bash脚本,这有助于我避免不必要的解决合并冲突与远程团队或使新的本地分支,并比较和合并在主分支
#set -x
branchname=`git branch | grep -F '*' | awk '{print $2}'`
echo $branchname
git fetch origin ${branchname}
for file in `git status | grep "modified" | awk "{print $2}" `
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file
git difftool FETCH_HEAD $file ;
done
在上面的脚本中,我获取远程主分支(不需要它的主分支)到FETCH_HEAD,它们只列出我修改过的文件,并将修改过的文件与git difftool进行比较
这里git支持许多difftools。我配置'Meld Diff查看器'为良好的GUI比较。
这对我来说很管用:
git add my_file.txt
git diff --cached my_file.txt
git reset my_file.txt
最后一步是可选的,它将使文件保持之前的状态(未跟踪)
如果你正在创建一个补丁也有用:
git diff --cached my_file.txt > my_file-patch.patch