gpt4 book ai didi

git - git remote prune、git prune、git fetch --prune 等之间有什么区别

转载 作者:IT王子 更新时间:2023-10-29 01:12:10 28 4
gpt4 key购买 nike

我的情况是这样的......在同一个仓库工作的人已经从他的本地和远程仓库中删除了一个分支......

大多数在 Stack Overflow 或其他网站上询问过此类问题的人都有分支问题仍然显示在他们的远程跟踪分支列表 git branch -a 底部:

* master
develop
feature_blah
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah
remotes/origin/random_branch_I_want_deleted

然而,在我的情况下,不应该存在的分支是本地的:

* master
develop
feature_blah
random_branch_I_want_deleted
remotes/origin/master
remotes/origin/develop
remotes/origin/feature_blah

当我执行以下任一操作时,它不会在本地删除:

$ git prune

我也试过:

$ git remote prune origin
$ git fetch --prune

更多有用的信息:当我检查 git remote show origin 时,它是这样的:

* remote origin
Fetch URL: utilities:homeconnections_ui.git
Push URL: utilities:homeconnections_ui.git
HEAD branch: master
Remote branches:
master tracked
develop tracked
feature_blah tracked
other123 tracked
other444 tracked
other999 tracked
Local branches configured for 'git pull':
develop merges with remote develop
feature_blah merges with remote other999
master merges with remote master
random_branch_I_want_deleted merges with remote random_branch_I_want_deleted
Local refs configured for 'git push':
develop pushes to develop (local out of date)
master pushes to master (up to date)
feature_blah pushes to feature_blah(up to date)

请注意,它仅出现在标题为 Local branches configured for 'git pull':

的部分中

为什么?

最佳答案

我不怪你对此感到沮丧。最好的观察方式是这样的。每个远程分支可能有三个版本:

  1. 远程仓库中的实际分支
    (例如,位于 https://example.com/repo.git 的远程仓库,refs/heads/master)
  2. 您在本地对该分支的快照(存储在 refs/remotes/... 下)
    (例如,本地存储库,refs/remotes/origin/master)
  3. 还有一个可能正在跟踪远程分支的本地分支
    (例如,本地存储库,refs/heads/master)

让我们从 git prune 开始。这会删除不再被引用的对象,它不会删除引用。在您的情况下,您有一个本地分支机构。这意味着有一个名为 random_branch_I_want_deleted 的引用引用了一些代表该分支历史的对象。因此,根据定义,git prune 不会删除 random_branch_I_want_deleted。实际上,git prune 是一种删除在 Git 中累积但未被任何内容引用的数据的方法。一般来说,它不会影响您对任何分支的看法。

git remote prune origingit fetch --prune 都对 refs/remotes/... 下的引用进行操作(我将将这些称为远程引用)。它不影响本地分支机构。如果您只想删除特定远程下的远程引用,则 git remote 版本很有用。否则,两者做完全一样的事情。因此,简而言之,git remote prunegit fetch --prune 对上面的数字 2 进行操作。例如,如果您使用 git web GUI 删除了一个分支并且不想让它再显示在您的本地分支列表中(git branch -r),那么这就是您应该使用的命令.

要删除本地分支,您应该使用 git branch -d(或者 -D 如果它没有在任何地方 merge )。 FWIW,没有 git 命令可以在远程分支消失时自动删除本地跟踪分支。

关于git - git remote prune、git prune、git fetch --prune 等之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20106712/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com