我在本地Git存儲庫中有約50次提交。我對當前HEAD中的某個特定文件做了一些更改,並且希望將這些文件更改更新爲所有以前的提交。是否有可能在git中實現這一點?更改之前提交的當前數據中的文件內容
回答
UPDATE - 儘管我的原始答案中的命令有效,但在反射時它可能不是在索引過濾器中使用的最佳方法;添加了一些關於此的評論
這是可能的,但是有成本。
您所描述的是「歷史重寫」,它將更改每個提交的提交ID。如果你單獨使用這個回購,並且你還沒有使用提交ID(SHA)值作爲任何東西(比如文檔或者其他),那麼這很可能是好的。
如果其他人也使用回購(或者如果您有多個克隆),您需要協調切入。基本上我的建議是安排一段時間,當所有更新被推到一個普通的回購站(可能是起源),然後放棄所有的克隆,然後重寫並替換原點,然後重新克隆。從技術上講,您不必這樣做,但請參閱git rebase
文檔(實際上適用於任何歷史重寫)中的「從上游重建中恢復」。
因此,如果您決定繼續進行重寫,最簡單的方法可能是使用git filter-branch
。 (如果你的回購某些假設屬實,那麼一個rebase
爲基礎的方法可以工作,但filter-branch
是更普遍適用。)
git filter-branch --index-filter 'git reset master -- file/to/be/rewritten' -- --all
這產生了一些「備份」裁判,你會想刪除一旦你已驗證結果。
注意,我本來建議
git filter-branch --index-filter 'git checkout master -- file/to/be/rewritten' -- --all
這也似乎工作;但reset
命令與更新索引更純粹相關,因此可能是更好的選擇。
順便說一下,如果您有任何提交,其中唯一改變了父項的是您要替換的文件,那麼該提交現在將與其父項完全匹配。如果你願意,你可以通過在'filter-branch'中加入'--prune-empty'選項來移除這樣的提交 –
- 1. 在提交新的更改之前更正以前的提交
- 2. 獲取textarea的內容之前提交
- 3. 修改之前提交的提交
- 4. 如何在提交Tinymce內容之前等待ajax數據
- 5. 在linux中修改文件之前檢查文件的內容
- 6. 在提交表單之前更改數據
- 7. WPF內容更改前的DependencyProperty事件
- 8. Eclipse更改當前文件
- 9. 如何在閱讀文件之前更新文件的內容?
- 10. 如何根據當前時間更改div的內容?
- 11. 如何在提交之前查看EF-CodeFirst中的更改?
- 12. 提交之前提交的另一個ipa文件
- 13. 「unadd」一個文件提交之前svn
- 14. 提交之前的Oracle更改,更新和系統崩潰
- 15. 更改提取後和更改事件之前的骨幹數據
- 16. 提交之前提交的JQuery模式
- 17. 在提交之前使用php文件驗證表單數據
- 18. 更改以前的提交SourceTree
- 19. 如何知道在提交之前哪些文件或文件夾被更改
- 20. 獲得提交的前散列提交,改變特定文件
- 21. 如何更新已經提交的當前文件?
- 22. 在編輯之前更改NSTableView中的單元格內容
- 23. PHP:在提交到數據庫之前驗證更新表單中的數據
- 24. 在提交給Apple之前是否更改了.app文件的名稱?
- 25. Angular 2根據當前路由器狀態更改sidenav內容
- 26. Jquery.submit() - 改變表單值之前提交
- 27. 使用git rebase更改之前提交的代碼-i
- 28. 在提交之前更改表格的形式
- 29. 爲什麼不提交對版本控制的更改...之前
- 30. 在提交之前修改表單數據
你爲什麼要這麼做? git的想法是跟蹤變化歷史。 – Fede
@Fede - 有幾個很好的理由(以及許多不太好的理由)爲什麼有人可能會這樣做。我並不反對任何人考慮這樣做應該檢查並重新檢查他們的推理,但最終問題是什麼 - 如果OP認爲他們的歷史在更換特定文件時更有價值,那不是我們的項目爭論。 –