2015-12-06 242 views
1

我意外地做了一個提交,它提供了一些不應該提交的敏感信息。 下面介紹一下提交歷史類似: Git commits在Git中刪除提交

我已經刪除了一些識別信息,但基本上我想刪除犯C.理想情況下,我想保持提交A和B,而這樣做的,但如果它是不可能的,那麼回去承諾D是可以接受的。

注意:這是在主分支,如果它有所作爲。

我已經試過

git rebase D 
git push 

我也試過這裏的指示: http://www.clock.co.uk/blog/deleting-a-git-commit

但他們都沒有提供了理想的結果。我確信我做錯了什麼。

+2

接受的答案definintely不會做你想做的。你正在尋找類似'git filter-branch'的東西。見http://stackoverflow.com/questions/872565/remove-sensitive-files-and-their-commits-from-git-history。 –

+0

我同意過濾器分支是另一種選擇。相應更新了我的答案。它在過去幾次幫助過我,但請記住,您可能需要強制推送。 – CodeWizard

回答

-1

幾個選項:

還原

你可以簡單的恢復代碼在C承諾:

revert <C commit id> 

這將恢復在這次提交添加的代碼。

櫻桃採摘根據您origin master

結帳新的分支,然後選擇你想要同時跳過你要刪除的那些保持承諾。

git checkout origin/master 
git checkout -b <new_branch> 
git cherry-pick <commit1> <commit2> ... <commitn> 

過濾分支

有一天你或合作者可能的敏感數據,如密碼或SSH密鑰,一不小心犯成一個Git倉庫。儘管你可以使用git rm從最新的提交文件中刪除文件,但該文件仍然會存在於版本庫的歷史記錄中。幸運的是,還有其他工具可以完全從存儲庫的歷史記錄中刪除不需要的文件。本文將解釋如何使用其中兩個:git filter-branch和BFG Repo-Cleaner。

https://help.github.com/articles/remove-sensitive-data

Remove sensitive files and their commits from Git history

+1

我不認爲這會永久消除回購中所有代碼的痕跡,而這正是OP想要的。 –

+0

櫻桃挑選會。因爲你將打開一個新的分支,你只需要將它導入到它所需的代碼而不是C提交。 恢復會留下痕跡 - 我同意 – CodeWizard

+0

無論您創建多少個新分支或您如何創建它們,前一個提交仍在回購中。 –