Git – git-prune
Git prune 是一个命令,用于删除当前分支中无法访问的所有文件。当您的工作目录中有很多不想保留的文件时,prune 命令很有用。 git prune 的主要用途是在您完成项目工作后清理您的工作目录。 git prune 的实际作用是,假设您有一个无法从当前分支访问的对象或提交。然后 git prune 将删除该对象或提交。基本思想是 git prune 是一种清理工作目录的方法,使项目工作更轻松、更轻松。
命令:
git fetch –prune
git fetch –prune
git remote prune origin
这将导致远程存储库被修剪。如果要配置 git 在获取远程存储库时对其进行修剪,可以使用:
git config –global fetch.prune true
让我们更详细地了解 git prune 命令。
考虑这种情况,假设您有一个正在处理的项目。您的工作目录中有一堆文件,并且从当前分支无法访问提交。然后,您要删除当前分支无法访问的所有对象或提交。
1.创建一个新的存储库并初始化它
mkdir git-prune-demo-geeks
cd git-prune-demo-geeks
git init .
echo “Hello World” > hello.txt
git add hello.txt
git commit -m “first commit”
上述命令序列将:
- 创建一个名为 git-prune-demo-geeks 的新存储库
- 将当前目录更改为 git-prune-demo-geeks
- 初始化存储库
- 创建一个内容为“Hello World”的文件 hello.txt
- 将文件 hello.txt 添加到暂存区
- 使用“first commit”消息提交文件 hello.txt
输出:
2.修改文件hello.txt,新建commit
echo “Hello from the other side” > hello.txt
git add hello.txt
git commit -m “second commit”
输出:
这会将“Hello from the other side”这一行添加到文件 hello.txt 中,并使用“second commit”消息提交它。要验证上述命令序列,我们可以使用以下命令:
git log
输出:
在这里,git log 将显示存储库的提交历史。
3. 使提交无法从当前分支到达
git reset –hard HEAD~1
输出:
这里, HEAD~1 是当前分支无法访问的提交。现在,如果我们再次尝试查看 git log 输出,我们将看到该提交不再可从当前分支访问,它将仅显示可从当前分支访问的提交。
git log
输出:
这个存储库现在有一个提交,它是一个分离的提交。因此,如果您尝试签出提交,它不会签出提交,而是会创建一个分离的分支。第二次提交是一个分离的提交,不再显示在 git log 输出中。
git checkout HEAD~1
输出:
HEAD~1 是与当前分支分离的提交。
4. 运行 git prune
签出分离的提交后,我们必须通过 git checkout 命令返回到 master,然后运行 git prune 命令。我们必须将某些选项传递给 git prune 命令,以便命令的输出显示要修剪的内容。
git prune –dry-run –verbose
输出:
在这里,空输出意味着没有任何东西被修剪。因为在存储库的某个地方,git 保留了与当前分支分离的提交引用。所以 git prune 不会删除提交。为了结束我们的场景,我们必须首先清除reflog 。
git reflog expire –expire=now –expire-unreachable=now –all
这将强制使 reflog 过期。删除 reflog 后,我们可以再次运行 git prune 命令。
git prune –dry-run –verbose –expire=now
输出:
这将导致显示无法从当前分支访问的提交和树对象的 git SHA 对象引用。