[英]Viewing changes to deleted files in git
假設當我從master
分支出來時,我的repo的master
分支上有一個文件colors.txt
,其中包含以下內容:
red
green
blue
yellow
然后,我分支到my-branch
,在其中進行以下更改:
colors.txt
添加red.txt
並包含以下內容:
red
添加green.txt
並包含以下內容:
green
添加具有以下內容的blue.txt
:
blue
添加帶有以下內容的yellow.txt
:
yellow
現在,我需要對master進行一些更改,因此我想合並。 但是,也有人將colors.txt
更改為:
red
green
blue
yellow
orange
purple
在合並期間,我得到的唯一信息是刪除了文件colors.txt
,因此如何查看主文件上的更改,以便我可以適當地解決沖突(在這種情況下,通過添加文件) orange.txt
和purple.txt
)?
您可以使用以下命令在master上顯示對該文件所做的所有更改:
git diff HEAD...master -- colors.txt
在您的情況下,這應該導致以下輸出:
red
green
blue
yellow
+orange
+purple
對git diff
使用三個點將顯示所有提交的更改,這些更改是第二個引用提交的父級,而不是第一個引用提交的父級。 因此,使用此操作,您將看到如果尚未刪除文件則將合並的所有更改。
通過使用-- colors.txt
, git diff
顯示的更改僅限於該文件。
該命令的更通用版本是
git diff HEAD...MERGE_HEAD -- colors.txt
MERGE_HEAD
始終設置為合並的提交,因此它可以替換合並的分支名稱。 使用此方法,您甚至可以設置一個別名以重用此命令:
git config --global alias.merge-diff-theirs "diff HEAD...MERGE_HEAD"
之后你可以做
git merge-diff-theirs -- colors.txt
棘手的場景,對不對? 我認為您可以嘗試做的最好的就是找出“何時” color.txt被刪除。 如果您沒有合並,我會說:使用二等分線找出文件消失的時間,這樣您就可以看到發生了什么,但是您正在合並,所以這不好。 git blame --reverse
可以通過告訴您文件何時最后一次出現在您的工作樹上而有所幫助。 git log --name-status -- <file-path>
還可以幫助您查看文件何時消失(以及為什么要通過寫得很好的修訂注釋,對嗎?)。 我會告訴您給difflame一個testdrive(我通過混合blame和diff輸出使用的工具可以告訴您刪除行的確切版本),但是我認為因為文件被完全刪除了,它將打破..雖然不確定。 這是鏈接,以防萬一: https : //github.com/eantoranz/difflame 。 現在...如果您能夠找出刪除該文件的版本,您可能會發現為什么刪除該文件,並且應該弄清楚必須為添加到color.txt的新顏色創建一個文件。 同時保持color.txt刪除,以便合並“完成”。
好的,我測試了以下內容:
對我來說, git diff colors-test.. -- colors.txt
提供以下輸出:
-red
-green
-blue
-yellow
-orange
-purple
其中color-test
是我添加了橙色/紫色的分支,而..(nothing)
表示HEAD
。 如果文件很小,這可能沒問題,但是完整的差異可能會更好。
要找出刪除文件的提交方式,可以嘗試類似
git log --name-status -- colors.txt
並且您將找到一個帶有D colors.txt
的提交,這是刪除文件的提交,在我的情況下,短哈希為e1bb165
。 您可能想在此之前與提交進行比較
git diff colors-test..e1bb165~1 -- colors.txt
這給了我
green
blue
yellow
-orange
-purple
當您將-R
開關傳遞給git diff
,將得到+
而不是-
(輸入是反向的)。
希望能有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.