我怎樣才能git diff A...HEAD從我的本地樹中獲得等效的但也包括所有更改(已暫存和未暫存)?
各種形式的 git diff 似乎都以一種或另一種為中心,但不是兩者兼而有之。
uj5u.com熱心網友回復:
到git diff,A...HEAD意味著:
- 運行
git merge-base --all A HEAD; - 隨機獲取輸出提交哈希 ID 之一;1
- 跑。
git diff hash HEAD
在git diff步驟3中運行完全忽略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注意到是否有多個合并基礎并在這種情況下生成警告訊息,以便您知道它自己選擇了一個合并基礎。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/332861.html
標籤:混帐
上一篇:git存盤庫的增量包
