2012-01-23 64 views
6

我知道GIT重設會重寫歷史記錄 - 即提交id將會改變。但是,有什麼方法可以追溯分支機構重新啓動和分支機構的情況?Git日誌重設

編輯:我有一個發展分支'A'和一個主題分支'B'。 'A'由團隊共享。在某個時候,'A'已經與主流分支重新合作。由於重新編譯(以及後續的提交),當我更新主題分支時,我看到了差異。我試圖找出正確的人來解決問題。

回答

8

你可能知道是誰做的!當你重新綁定時,由於提交被重寫,提交者信息將來自正在進行rebase的人,而不是原作者。 (這與作者信息是分開的)。

您可以在gitk(位於左下方的diff窗格中)或git log --pretty=fuller的輸出中(如比full full滿)看到此信息。日誌輸出示例:

commit b8624718b97a39a04637c91ec3517c109f3f681d 
Author:  Original Author <[email protected]> 
AuthorDate: Sun Aug 8 02:15:10 2010 -0300 
Commit:  New Committer <[email protected]> 
CommitDate: Mon Jan 23 17:29:39 2012 -0800 

    a lovely commit message 

... 

提交者名稱,電子郵件和日期來自實際編寫提交的操作。請注意,如果它已被多次重寫,您只會獲得最新的信息。

至於在哪裏重新裝訂 ...如果重新提交的提交的原始版本也在您的歷史中,那很容易。只要搜索的完整歷史記錄的匹配提交,例如通過提交信息的片段,或者一些在改承諾:

git log --all --grep='commit subject from a rebased commit' 
git log --all -S'void this_function_was_added() {' 

如果你沒有原來在歷史的任何地方犯了,這將變得更加困難。希望你能通過追蹤那些做過它的人,並且如果他們不知道,要求他們在其存儲庫中運行git reflog show <branch>來查看該分支的歷史記錄。

2

Reflog是記錄分支尖端何時更新的機制。該命令用於管理記錄在其中的信息。

「基本上每次存儲數據的Git內執行操作,你可以找到它的引用日誌裏面。Git的嘗試真的很難不丟失數據,因此,如果由於某種原因,你覺得它有,你可以使用git reflog來挖掘它,這意味着你可以將它用作安全網絡:你不應該擔心因爲你可以找到它,合併,重定位或者其他一些行爲會破壞你的工作再次使用這個命令。「

更多有關此主題

+3

只是一個評論,這個歷史只存在於採取行動的回購。你不會在你的回購中找到別人的歷史。 –

5
git reflog 

將讓你看看你所有的Git工作流程的歷史。在我正在進行的一個項目中,這裏是前三名reflog條目:

151a1da [email protected]{0}: filter-branch: rewrite 
db8c822 [email protected]{1}: checkout: moving from fixes to master 
db8c822 [email protected]{2}: checkout: moving from master to fixes 

第一列顯示了SHAID。因此,您可以在此SHAID 上使用標準git命令,例如git show 151a1da