是否有可能要求git diff在其diff输出中包含未跟踪的文件?或者我最好的选择是添加我创建的新文件以及我编辑和使用的现有文件
git diff --cached
Run Code Online (Sandbox Code Playgroud)
?
ara*_*nid 246
使用最近的git版本,您可以git add -N
使用文件(或--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
Run Code Online (Sandbox Code Playgroud)
可悲的是,正如所指出的那样,git stash
当你有一个--intent-to-add
像这样的待处理文件时,你不能这样做.虽然如果你需要藏匿,你只需添加新文件然后存储它们.或者您可以使用模拟解决方法:
git update-index --add --cacheinfo \
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 new.txt
Run Code Online (Sandbox Code Playgroud)
(在这里设置别名是你的朋友).
Har*_*old 85
我相信你可以通过简单地提供两个文件的路径来区分索引和未跟踪文件中的文件.
git diff --no-index tracked_file untracked_file
Run Code Online (Sandbox Code Playgroud)
Jo *_*iss 36
对于我的交互式日常gitting(我将工作树始终与HEAD区分开来,并且希望在diff中包含未跟踪的文件),add -N/--intent-to-add
因此无法使用,因为它会中断 git stash
.
所以这是我的git diff
替代品.这不是一个特别干净的解决方案,但由于我真的只是以交互方式使用它,所以我很适合黑客攻击:
d() {
if test "$#" = 0; then
(
git diff --color
git ls-files --others --exclude-standard |
while read -r i; do git diff --color -- /dev/null "$i"; done
) | `git config --get core.pager`
else
git diff "$@"
fi
}
Run Code Online (Sandbox Code Playgroud)
键入d
将包括差异中未跟踪的文件(这是我在工作流程中关心的),并且d args...
将表现得像常规git diff
.
笔记:
git diff
实际上只是单个差异串联,因此不可能d
从"真正的差异"中告诉输出 - 除了所有未跟踪文件最后排序的事实.git diff
.如果有人想出如何做到这一点,或者如果某个功能git
在未来的某个时刻被添加,请在这里留言!use*_*520 23
不是百分之百,但由于没有真正令人满意的答案,这里还有另一种;)如果文件没有跟踪,显然差异是整个文件,所以你可以用更少的方式查看它们:
less $(git ls-files --others --exclude-standard)
Run Code Online (Sandbox Code Playgroud)
用它们之间的导航:n和:p用于下一个和前一个..
Amo*_*ari 18
git add -A
git diff HEAD
Run Code Online (Sandbox Code Playgroud)
如果需要,生成补丁,然后:
git reset HEAD
Run Code Online (Sandbox Code Playgroud)
ala*_*ock 13
使用此命令进行暂存和非暂存时更改工作.上传时新文件有效:
$ git diff HEAD
Run Code Online (Sandbox Code Playgroud)
如果它们没有暂存,您将只看到文件差异.
这对我有用:
git add my_file.txt
git diff --cached my_file.txt
git reset my_file.txt
Run Code Online (Sandbox Code Playgroud)
最后一步是可选的,它会使文件处于先前状态(未跟踪)
如果您也要创建补丁也很有用:
git diff --cached my_file.txt > my_file-patch.patch
Run Code Online (Sandbox Code Playgroud)
对于一个文件:
git diff --no-index /dev/null new_file
Run Code Online (Sandbox Code Playgroud)
对于所有新文件:
for next in $( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null $next; done;
Run Code Online (Sandbox Code Playgroud)
作为别名:
alias gdnew="for next in \$( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null \$next; done;"
Run Code Online (Sandbox Code Playgroud)
对于所有修改和新文件合并为一个命令:
{ git --no-pager diff; gdnew }
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
124514 次 |
最近记录: |