2014-12-01 96 views
2

考慮到問題標題,我將如何恢復存儲在A中的文件?Git:恢復存儲在分支A中的文件,在B中刪除

具體而言,這些文件存在於僅用於維護這些文件的功能分支上。

現在我想在我的devel的分公司所有這些變化,但feature_x一個簡單合併成devel的將不包含已刪除的文件。我的猜測是git檢測到這些文件已被刪除,所以它們的變化與devel無關。

我希望解決方案不包含devel中所有rm提交的恢復(不幸的是,該分支的外包不是非常線性)。

編輯:甚至恢復失去歷史,因爲git只跟蹤內容,而不是文件。因此,如果使用還原或結帳方法並不重要,它們是恕我直言的等價物。

回答

1

我知道它是醜陋的,但簡單的東西可能是解決:

git checkout feature_x -- filename 

你也可以緩解這一過程:

git checkout branchA 
for i in "$(git log feature..branchA --summary --diff-filter=D | grep "delete mode" | cut -d " " -f 5-)" ; do 
    git checkout feature -- "$i" 
done 
+0

通過使用結帳我將失去歷史。這不應該是恢復的情況,對吧? – marscher 2014-12-01 16:48:07

+0

結帳意味着幾乎「從該分支複製該文件」 – DRC 2014-12-01 16:48:50

1

我相信你不得不恢復已刪除的文件中的一個一次,如果你不想恢復。

該命令會在文件被刪除前爲您提交提交。 (它會回頭找最近的提交,其中[文件名]改變)

git rev-list -n 1 HEAD -- [filename]

然後你可以檢查出該文件和合並如常。

相關問題