2017-06-13 136 views
0

我已經刪除了多個提交前的文件,現在我需要它的一部分。
如何顯示它,以便我可以複製粘貼?如何顯示之前刪除多個提交的git文件

我已經試過這樣:

git show HEAD~2 -- path/to/file 

但我得到任何輸出。 自動完成不適用於刪除的文件,所以我不是100%確定文件名,但我99%確定。

+0

您正在使用Linux或Windows?如果Windows如何訪問Git(通過UI或命令)?如果命令 - 請參閱我的答案 – smilyface

+0

請選擇正確的答案。這對其他人會有幫助。 – smilyface

回答

1

git cat-file -p HEAD~2:path/to/file

1

您可以檢出您刪除它的提交(git checkout "old-commit-hash"),複製您需要的文件並再次檢出當前數據(git commit "current-commit-hash")。

的哈希可以擡起頭來:git log

+0

然後我需要儲藏我先做的變化?你可以做完整的命令列表嗎? –

+0

你可以用'git stash'存儲它們,或者已經提交它們(不推送)。 提交更改後,可以使用'git commit --amend'來修改提交的新更改。 – DanielM

+0

完整的更改將是: 1)'git add「更改文件」' 2)'git commit' 3)'git log' - >找出文件被刪除的提交和您當前的提交 4)'git checkout「old-commit-hash」' 5)複製你需要的fies 6)'git checkout'current-commit-hash'' 7)修改並修改它們到你當前提交的'git添加文件','git commit --amend' – DanielM

4

列出所有修改過的文件進行兩次提交之間。

git diff --name-only START_COMMIT..END_COMMIT 

使用--name狀態也會顯示像添加,刪除,用文件

git diff --name-status START_COMMIT..END_COMMIT 
0

用gitk來一起修改了變化。

一個簡單的方法,如果你碰巧使用gitk gui,只需簡單地在你的終端中運行gitk並通過git樹列表你可以刪除被刪除的文件。


使用CLI方式:

git log --your_file_path 

git log --full-history -- your_file_path 

如果你只是想看到從樹,Check this answer被刪除的文件。

1

您可以使用命令git whatchanged找到已刪除文件的名稱。它顯示了以前提交修改的文件列表。刪除的文件用字母D標記。在識別文件名後,要恢復它,請鍵入git checkout <hash_id>~ -- <filename>,其中<hash_id>表示提交的哈希,其中您刪除了指定的文件<filename>

如果您只想查看文件,請鍵入git show <hash_id> -- <filename>。該命令打印指定提交所做文件的更改(包括刪除)。

+0

謝謝,不知道'git whatchanged'。 '〜'是'git checkout '中的拼寫錯誤嗎?我可以只顯示文件而不檢查出來嗎?不知道爲什麼'git show hashid - path/to/file'顯示diff而不是完整文件。 –

+0

需要使用代字號來恢復文件。提交哈希之後的波浪號表示該文件仍然存在的上一次提交。但是如果你的目標只是看文件,當然''show'命令就足夠了。我補充了答案,謝謝。 – mymedia

0

這將顯示您在特定文件最後一次變更:

git log -1 -p -- <file_path> 

然而,這有時也不是很方便的,因爲你將看到的變化,但複製粘貼過程可能會非常棘手,由於領先-每個改變線的前面。

如果要恢復的文件,這樣就可以很容易地從它複製粘貼:

  • 獲得的提交SHA在那裏你已刪除的文件:

    git rev-list -n 1 HEAD -- <file_path> 
    
  • 結帳使用脫字符號(^)符號:

    git checkout <SHA>^ -- <file_path> 
    
1

我覺得你的問題是:

  1. 你刪除一個文件
  2. 然後提交
  3. 提交的地塊的發生
  4. 現在需要該文件的信息。

如果是這樣的話,你所做的是正確的。但更多的是實現它。

  1. git log --pretty=format:"%h - %an, %ad --> %s" --date=iso
    這會給你日期可讀的格式提交。 讓有100次的提交,你的提交日期是圍繞從頭部30日(再採取一些「最後40」提交)

  2. git log --pretty=format:"%h - %an, %ad --> %s" --date=iso | head -40 | awk '{print $1}' 如果給40個提交作爲輸出,做到以下幾點。

  3. while read commit ; do echo -e "\n\nFile committed in $commit are : " ; git show --pretty="format:" --name-only $commit ; done< <(git log --pretty=format:"%h - %an, %ad --> %s" --date=iso | head -40 | awk '{print $1}')

  4. 然後乘坐提交ID與你的文件。

  5. 然後你可以去你的命令。