确定删除本地 git 存储库是否安全

Determine if it is safe to delete a local git repository

我经常在我的笔记本电脑上有一个 git 存储库的开发克隆,我在上面创建功能分支等来实现功能。当我在某项功能上工作了一半,但需要在同一存储库中处理其他内容时,我会执行 git stash 并为该功能检出一个新分支。

当然,git branch 告诉我那里的所有分支。然而,一段时间后,我的笔记本电脑上可能存在本地结帐,一些功能分支未被推送,甚至存在于远程原始分支上。一段时间不处理项目后,结帐可能会弄乱我的工作空间,我可能希望将它从我的笔记本电脑中删除。

此外,对于存储库,我可能还想知道我的笔记本电脑上有哪些新文件和更改,但源中没有。 git status 告诉我关于当前分支签出的信息,但只是部分,因为它没有说明服务器上已经有哪些提交,哪些还没有。而且,它也不是对每个分支都这样做。

是否有 git 命令可以告诉我有哪些新文件和更改,以及哪些功能分支在我的笔记本电脑上可用但在 origin 上不可用,以便我可以确定它是否是从我的笔记本电脑中删除 git 存储库是否安全?

如果命令是这样就好了:

一般来说,我想要一个 'is it safe to delete this repository knowing what exists on origin' 甚至更好的 'what stuff did I leave unsolved in this repo' 命令。

请注意,我认为了解我的笔记本电脑上的内容而不是源上的内容也很有用,以便指出仍应清理的内容。

将 repo 移动到备份文件夹是不行的,这会造成很多混乱,最后仍然不清楚哪些代码是最新的,bug 最少。

可能有用的命令是显示本地存在但不在源上的提交,以及在源中的不同分支中的提交,因为它们在本地。此外,显示每个分支未提交更改的命令会很好,即那些 ar

第一步(也是非常好的)是查看

的输出
git push origin --all --dry-run

显示哪些分支 推送到远程。如果输出为空(或 "up-to-date" 或其他),则可以安全地删除本地分支。

另一个帮助命令是

git fetch origin
git cherry -v master origin/master

它显示了本地 master 和 origin/master 共有的提交。那些 前缀为 - 的已经在 origin/master 中,前缀为 + 符号不是,即如果显示的所有提交都以 - 为前缀,则删除本地分支是安全的。如果一些以 + 为前缀,那么 master 和 origin/master 在这些提交中是不同的。

实际上我会坚持使用 git push origin --all --dry-run,因为它更容易解释。

上面缺少的部分 (IIUC) 是:如果我删除这个 repo,哪些本地文件会永远丢失? (例如,本地数据库文件被 .gitignore 忽略)。

在我看来

git clean -nxd

回答了这个问题。