簡體   English   中英

在git中查看對已刪除文件的更改

[英]Viewing changes to deleted files in git

假設當我從master分支出來時,我的repo的master分支上有一個文件colors.txt ,其中包含以下內容:

red
green
blue
yellow

然后,我分支到my-branch ,在其中進行以下更改:

  1. 刪除colors.txt
  2. 添加red.txt並包含以下內容:

     red 
  3. 添加green.txt並包含以下內容:

     green 
  4. 添加具有以下內容的blue.txt

     blue 
  5. 添加帶有以下內容的yellow.txt

     yellow 

現在,我需要對master進行一些更改,因此我想合並。 但是,也有人將colors.txt更改為:

red
green
blue
yellow
orange
purple

在合並期間,我得到的唯一信息是刪除了文件colors.txt ,因此如何查看主文件上的更改,以便我可以適當地解決沖突(在這種情況下,通過添加文件) orange.txtpurple.txt )?

您可以使用以下命令在master上顯示對該文件所做的所有更改:

git diff HEAD...master -- colors.txt

在您的情況下,這應該導致以下輸出:

red
green
blue
yellow
+orange
+purple

git diff使用三個點將顯示所有提交的更改,這些更改是第二個引用提交的父級,而不是第一個引用提交的父級。 因此,使用此操作,您將看到如果尚未刪除文件則將合並的所有更改。

通過使用-- colors.txtgit 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刪除,以便合並“完成”。

好的,我測試了以下內容:

  • 簽出新的分支顏色測試
  • 將橙色/紫色添加到現有的colors.txt中並提交
  • 切換回“主人”
  • 刪除colors.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM