本例的操作都将在sourcetree软件上进行。如果用其他git管理软件也同理。
问题描述
有时候我们可能在向GitHub上提交代码时不小心将账号密码上传了上去
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-7-1024x670.png)
此时我们或许会想将分支重置到提交密码之前的提交,但是这样是不可行的:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-8-1024x670.png)
你会发现推送不上去,因为远端比你多了一些提交,你得先拉取才行。
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-9.png)
那么如果拉取了再提交呢:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-10.png)
貌似可以提交了,但是GitHub上可以看你的历史提交:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-11-1024x493.png)
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-12.png)
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-13.png)
藏了个寂寞,如果有有心之人的话,你是藏不住的。
那么有没有办法在远端直接清除掉这个提交呢,请看下部分。
问题解决
我们从不小心提交密码的那个提交之前的一个提交那里创建一个新分支:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-18.png)
此处我取名master:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-19.png)
然后我们cherry-pick(sourcetree翻译为遴选)不小心提交了密码的那个提交。
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-21.png)
并取消勾选立即合并,这样做的目的是为了让我们能够删除密码:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-20.png)
然后编辑我们的文件删除不小心上传的密码:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-22.png)
暂存后提交,这样我们就能够做到保留其他更改和这个提交的描述内容的同时将密码删除:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-23-1024x670.png)
然后我们将之后的提交都一一进行cherry-pick,区别是勾选立即合并,因为之后的提交就不用我们手动操作了。之所以要一个一个操作是为了保留你的提交信息。
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-24.png)
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-25.png)
操作完所有提交后的效果(PS:清除密码和Merge branch的两个提交是之前演示错误做法留下的,此处可以不管):
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-26.png)
然后我们可以提交该分支到远端,然后我们就可以把原来的分支给删除了,我们原来分支上的所有数据都转移到了新的分支上。
在删除之前,如果你原来的分支是该库的默认分支,你还得去改一下默认分支:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-28-1024x461.png)
改成我们新建的分支:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-29-1024x511.png)
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-30.png)
然后就可以将原来的分支删除:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-31-1024x508.png)
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-32-1024x382.png)
然后你可以将新建的分支改为你原来分支的名字(你也可以选择不改):
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-33-1024x366.png)
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-34.png)
然后在提交记录里就找不到我们提交密码的那个提交了:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-35-1024x369.png)
随后我们需要更新一下本地的库,先进行获取,勾选删除不存在的跟踪分支:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-36.png)
然后将我们原来的main分支从本地删除:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-40.png)
记得勾选强制:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-41.png)
然后检出一下我们远程的main分支:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-42.png)
保持默认不变:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-43.png)
然后我们就可以删除我们临时创建的master分支了,此处不用勾选强制也可以删除,如果删除不掉就勾选强制:
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-44.png)
然后就完成了
![](https://www.zeromes.cn/wp-content/uploads/2022/04/image-45-1024x595.png)
GitHub上也看不到我们之前不小心提交的密码记录,完美解决。