当我删除我的一个本地分支时,我误解了这个命令,
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/featureX和origin/featureY.
现在,假设其他人合并featureX到master并从远程存储库中删除功能分支.然后原点只有两个分支master和featureY.
但是,当您获取时,三个远程分支将仍然存在,包括在远程存储库中删除的分支.这是为了防止你意外丢失分支(想象有人意外地从遥控器中移除了分支,然后从中取出分支的每个人也会丢失它,使其难以恢复).
相反,您需要告诉fetch命令修剪远程分支上不再存在的任何分支.因此,通过执行git fetch --prune origin或git fetch -p远程分支origin/featureX也将被删除.
顺便说一句.如果要从远程存储库中删除分支,则必须向其推送"空"分支,例如,git push origin :branchname将origin/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.
你有没有尝试寻找帮助fetch? git 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已被删除.