'git fetch -p'是什么意思

Sul*_*man 24 git

当我删除我的一个本地分支时,我误解了这个命令,

git branch -D branch-name

git fetch -p 
Run Code Online (Sandbox Code Playgroud)

但我看到他们是一个显示要删除的分支名称列表.

我害怕看到已删除的分支列表列表,并且思考可能是我执行了错误的命令,并且意外删除了所有分支!

这个命令(git fetch -p)的意思是什么.任何的想法?

pok*_*oke 27

当您获取远程存储库(例如"origin")时,您将获得该远程存储库上存在的每个分支的远程分支.这些分支在本地存储为<remote>/<branch>.

所以假设起源有分支master,featureX并且featureY.然后,取下面的"远程分支"后,存在于你的本地库:origin/master,origin/featureXorigin/featureY.

现在,假设其他人合并featureX到master并从远程存储库中删除功能分支.然后原点只有两个分支masterfeatureY.

但是,当您获取时,三个远程分支将仍然存在,包括在远程存储库中删除的分支.这是为了防止你意外丢失分支(想象有人意外地从遥控器中移除了分支,然后从中取出分支的每个人也会丢失它,使其难以恢复).

相反,您需要告诉fetch命令修剪远程分支上不再存在的任何分支.因此,通过执行git fetch --prune origingit fetch -p远程分支origin/featureX也将被删除.

顺便说一句.如果要从远程存储库中删除分支,则必须向其推送"空"分支,例如,git push origin :branchnameorigin/branchname在本地和远程本身上删除远程分支.


AD7*_*six 12

这意味着修剪

git fetch可以选择修剪远程分支,这意味着例如:

$ git branch -a
develop
master
remotes/origin/HEAD
remotes/origin/develop
remotes/origin/feature/deleted-last-week
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

如果feature/deleted-last-week远程上存在分支nolonger(因为其他人已将其删除),则运行fetch -p将删除对它的本地引用:

$ git fetch -p
remote: Counting objects: 751, done.
remote: Compressing objects: 100% (346/346), done.
remote: Total 697 (delta 399), reused 632 (delta 337)
Receiving objects: 100% (697/697), 785.97 KiB | 377 KiB/s, done.
Resolving deltas: 100% (399/399), completed with 27 local objects.
From github.com:AD7six/project
   3ed9793..dece27d  develop    -> origin/develop
   e4b5ae6..94053fd  master     -> origin/master
 x [deleted]         (none)     -> origin/feature/deleted-last-week
$ git branch -a
develop
master
remotes/origin/HEAD
remotes/origin/develop
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

因为它不再存在于遥控器上.修剪远程也可以显式调用为git remote prune.


Joh*_*ter 7

你有没有尝试寻找帮助fetchgit help fetch说明:

-p, --prune
    After fetching, remove any remote-tracking branches which no
    longer exist on the remote.
Run Code Online (Sandbox Code Playgroud)

通常,当您获取任何新引用或对您的refs/remote/<remote-name>区域进行更新时,删除引用除外.该-p选项要求fetch(和git remote update)先走,并删除任何远程引用该遥控器上不再存在. git remote prune还将删除已删除的分支.

例如,假设有一个远程分支foo.在本地存储库中,refs/remote/origin/foo保留了引用.有人删除了foo分支.下次运行时git fetch,您的引用仍然保持不变.如果你git fetch -p改为运行,你会看到它refs/remote/origin/foo已被删除.

  • @AndreaBergonzo 不。:-) `git remote prune` 只查找遥控器上是否存在分支,如果它们在遥控器上丢失,那么它们将在本地删除(从 refs/remote 下)。`git fetch -p` 将获取新数据,但也会运行修剪步骤。所以它们略有不同。 (2认同)