我已經提交并推送了一個敏感密碼檔案到我們的遠程 repo azure dev ops。
但是,現在,它只在我的遠程分支上。它還沒有被合并到主干。我能否以某種方式洗掉這個檔案/甚至是我從 azure dev ops 所做的整個提交?
uj5u.com熱心網友回復:
ASAP:我想做的第一件事是為理智起見,復制一份你的本地分支,重置到壞提交之前的提交,然后強制推送你的分支。這將最大限度地減少別人看到你的密碼檔案的機會,而且你可以在事后修復你的分支。以下是你需要的命令(假設壞的提交是在一個叫my-branch的分支上):
git checkout my-branch # 以防它還沒有被檢查出來
git status # 確保你的狀態是干凈的,如果不是,就藏起來或提交或洗掉這些變化
git branch my-branch-bad # 給它做個副本
git reset <commit-id-before-bad-commit> # 把分支放回壞的提交之前
git push --force-with-lease # 將該分支推送到 AzDev 上。
在這一點上,密碼檔案在AzDev上不再(容易)獲得。現在讓我們來想想,如果需要的話,如何最好地恢復你的分支。
如果那個壞的提交是你最新的提交,那么你就可以完成了,因為你提到你愿意完全失去那個提交。或者,請注意,我特意建議git reset,而沒有指定型別,如--soft,--mixed,或者--hard,而默認的是--mixed。這意味著你所有的修改仍將在你的作業檔案夾中。如果你想重新提交,請將除密碼檔案外的所有待處理檔案分階段提交,然后重做提交。然后你可以推送該提交,你的分支就會變成你最初想要的樣子。
git reset --hard my-branch-bad # 將分支重新設定為壞提交時的樣子
git rebase -i @{U} # 從遠程分支的頂端開始進行互動式重定向
神秘的@{u}是上游分支的縮寫,我們知道它目前是壞提交之前的第一個提交,因為那是我們在第一步中最后推送的。當互動式 rebase 出現時,它將顯示你推送的內容之后的所有提交,而第一個提交就是你想放棄的提交。你可以將第一行中的pick改為drop或d,或者你甚至可以直接洗掉第一行,然后保存并退出檔案。現在用git rebase --continue繼續進行重構。只要你剛才放棄的第一個提交的其余部分沒有后面提交需要的東西,那么你就不會有任何沖突,重構就會繼續并完成。你的最終結果就是原來的分支,只是省略了一個壞的提交。現在你可以推送該分支的最新版本了。你也可以洗掉那個壞分支的副本,因為你不再需要它了。git branch -D my-branch-bad。
現在你的分支已經修復了,你需要確定密碼檔案是否仍然可以訪問。由于它還沒有被合并到任何地方,我相信答案取決于你是否在你的分支上設定了一個 PR。如果你在你的分支上確實有一個PR,那么不幸的是,AFAIK的PR歷史將永遠包含特定更新中的那個檔案。如果分支上沒有PR,那么你可能是安全的(足夠),不必繼續擔心它。你(和任何人)可能仍然可以在AzDev中通過直接導航到提交ID網址看到提交,然而,我想不出有什么理由讓別人知道這個ID,而不是你,在這一點上。然而,任何在你的遠程分支上出現不良提交的人,都會在他們的本地版本中擁有一份提交的副本,如果他們選擇查看的話,就可以看到該檔案。
綜上所述,如果該 repo 是公開的,我不會冒險,你最安全的做法是更改該檔案中的所有密碼。如果該回購檔案是私有的,根據誰可能會訪問該回購檔案,我至少會改變你不希望你的組織中的其他人知道的密碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308159.html
標籤:
上一篇:OracleSQL:檢查給定日期的活躍用戶數量(檢查分組欄位的最接近日期)。
下一篇:如何將字串按特定順序分割成若干行
