我正在嘗試撤消已經推送到遠程的非常舊的提交。我環顧四周,認為這git rebase可能是最好的解決方案。所以我運行了代碼:
git rebase -i <commit-id>
然后編輯:
pick <commit-id> <commit-title>
drop <commit-id> <commit-title> <- the commit I want to delete
pick <commit-id> <commit-title>
然后嘗試將其與:wq. 然而,這引發了很多合并沖突(提交大約半年)。
我想撤消提交的原因是我不小心添加了一個帶有憑據的檔案,我不應該與其他協作者共享該檔案。
所以我唯一要撤消的是遠程檔案的“創建”。
是git rebase最好的方法嗎?
如果是這樣,有沒有辦法不觸發所有合并沖突(像以前一樣合并它們)?
我寧愿不要意外地以錯誤的方式合并沖突。
此外,我嘗試洗掉的提交不應與未來的提交造成任何沖突。我嘗試在git rebase不洗掉提交的情況下運行,但仍然彈出合并沖突。
uj5u.com熱心網友回復:
感謝@ElpieKay!
git filter-repo設法完成它的作業有關完整的詳細資訊,請看這里。
我第一次嘗試使用BFG,但我遇到了一些問題,所以我繼續使用git filter-repo.
- 我確保我已經推送了所有本地提交。
- 我安裝了
git filter-repo
brew install git-filter-repo
- 我克隆了一個新的本地存盤庫 (
git clone)。
這一步是因為git-filter-repo警告在新克隆的 repo 中運行命令。 - 洗掉憑證檔案并將其添加到
.gitignore. 如果您還沒有,請確保將憑據保存在其他地方。
git filter-repo --invert-paths --path PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA
echo "YOUR-FILE-WITH-SENSITIVE-DATA" >> .gitignore
git add .gitignore
git commit -m "deleted file <file-name> and added to .gitignore"
- 新克隆的 repo 將沒有來源。添加它。
git remote add origin <your-repo-clone-url>
- 強制推到原點
git push origin --force --all
- 最后要求在其他本地存盤庫中的所有其他舊分支上運行 rebase。
git checkout <the-branch-cut-from-the-old-main>
git rebase origin main
這應該可以解決問題!祝你好運!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478435.html
標籤:混帐 git-rebase
