2016-02-27 55 views

回答

1

有幾種方法可以考慮這一點。在命令行中,你可以做這樣的事情:

git reset --soft <some-ancestor-commit-ish> 
git commit -m "This commit combines some history." 

軟復位移動當前分支指向一些祖先的承諾,而改變工作目錄和索引。所以,現在你已經完成了這些提交所引入的所有更改,並且可以將它們作爲新的組合提交提交。這兩個步驟可以直接翻譯爲libgit2類似:

git_reset(repo, ancestor_commit, GIT_RESET_SOFT, NULL); 
git_commit_create(...); 
+0

我會測試它,但我不確定這一點,因爲我想刪除歷史記錄。你知道rebase命令行與壁球?我想在libgit2上這樣做,因爲它壓縮提交併刪除它們以創建一個新文件。 –

+0

Rebase不刪除歷史記錄。它會寫入新的歷史記錄,並使舊的提交無法訪問。我描述的過程基本上是一回事。無法訪問的提交只會在他們變老並且運行諸如'git gc'之類的東西之後纔會被修剪。據我所知,libgit2甚至沒有辦法從數據庫中刪除不可訪問的對象。 –

+0

謝謝你,夥計們,我測試過了,它工作的很好! –

相關問題