繁体   English   中英

git diff A…HEAD 加上索引和未暂存的文件?

[英]git diff A…HEAD plus index and unstaged files?

我怎样才能从我的本地树中获得相当于git diff A...HEAD的等价物,但还包括所有更改(已暂存和未暂存)?

各种形式的 git diff 似乎都以一种或另一种为中心,但不是两者兼而有之。

对于git diffA...HEAD意味着:

  1. 运行git merge-base --all A HEAD
  2. 随机获取输出提交哈希 ID 之一; 1
  3. 运行git diff hash HEAD

在第 3 步中运行的git diff完全忽略了 Git 的索引和您的工作树。

其他形式的git diff可以查询索引和/或工作树,但三点A...HEAD语法永远不会。

如果您想将合并基础提交或其中之一与当前工作树(即暂存和未暂存更改)进行比较,则必须找到合并基础的哈希 ID ,选择一个,然后自己运行git diff 例如:

git diff $(git merge-base A HEAD)

将在任何 sh/bash 兼容的 shell 中完成这项工作。 git merge-base命令将以相同的方式选择一个合并基础(参见脚注 1),然后 Git 将运行从该特定提交到工作树的差异。


1从技术上讲,它不是随机的,而是算法的,但算法未指定。 理想情况下,此处的git merge-base仅生成一个哈希 ID,因此无需担心它会随机选择其中之一这一事实。 只要集合中只有一个哈希 ID 可供选择,算法最终使用什么选择并不重要:您将只获得一个合并基础提交。

现代git diff注意到是否有多个合并基础并在这种情况下生成警告消息,以便您知道它自己选择了一个合并基础。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM