确定删除本地 git 存储库是否安全
Determine if it is safe to delete a local git repository
我经常在我的笔记本电脑上有一个 git 存储库的开发克隆,我在上面创建功能分支等来实现功能。当我在某项功能上工作了一半,但需要在同一存储库中处理其他内容时,我会执行 git stash
并为该功能检出一个新分支。
当然,git branch
告诉我那里的所有分支。然而,一段时间后,我的笔记本电脑上可能存在本地结帐,一些功能分支未被推送,甚至存在于远程原始分支上。一段时间不处理项目后,结帐可能会弄乱我的工作空间,我可能希望将它从我的笔记本电脑中删除。
此外,对于存储库,我可能还想知道我的笔记本电脑上有哪些新文件和更改,但源中没有。 git status
告诉我关于当前分支签出的信息,但只是部分,因为它没有说明服务器上已经有哪些提交,哪些还没有。而且,它也不是对每个分支都这样做。
是否有 git 命令可以告诉我有哪些新文件和更改,以及哪些功能分支在我的笔记本电脑上可用但在 origin
上不可用,以便我可以确定它是否是从我的笔记本电脑中删除 git 存储库是否安全?
如果命令是这样就好了:
对于每个本地分支状态,如果它也存在于 origin 上,则 origin 是最新的并且它已经合并到其他原始分支中(通常你将一个功能分支与 master 合并不要把它推到原点)。
对于每个分支状态是否有本地更改尚未提交或只是隐藏。
我应该注意的其他坑剔除。
一般来说,我想要一个 '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
回答了这个问题。
我经常在我的笔记本电脑上有一个 git 存储库的开发克隆,我在上面创建功能分支等来实现功能。当我在某项功能上工作了一半,但需要在同一存储库中处理其他内容时,我会执行 git stash
并为该功能检出一个新分支。
当然,git branch
告诉我那里的所有分支。然而,一段时间后,我的笔记本电脑上可能存在本地结帐,一些功能分支未被推送,甚至存在于远程原始分支上。一段时间不处理项目后,结帐可能会弄乱我的工作空间,我可能希望将它从我的笔记本电脑中删除。
此外,对于存储库,我可能还想知道我的笔记本电脑上有哪些新文件和更改,但源中没有。 git status
告诉我关于当前分支签出的信息,但只是部分,因为它没有说明服务器上已经有哪些提交,哪些还没有。而且,它也不是对每个分支都这样做。
是否有 git 命令可以告诉我有哪些新文件和更改,以及哪些功能分支在我的笔记本电脑上可用但在 origin
上不可用,以便我可以确定它是否是从我的笔记本电脑中删除 git 存储库是否安全?
如果命令是这样就好了:
对于每个本地分支状态,如果它也存在于 origin 上,则 origin 是最新的并且它已经合并到其他原始分支中(通常你将一个功能分支与 master 合并不要把它推到原点)。
对于每个分支状态是否有本地更改尚未提交或只是隐藏。
我应该注意的其他坑剔除。
一般来说,我想要一个 '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
回答了这个问题。