为什么 "git push" 在 "git push origin --delete BRANCHNAME" 之后起作用?

Why does "git push" work after doing "git push origin --delete BRANCHNAME"?

有时我想删除远程分支然后再次推送,例如我在本地修改了一个已经推送的提交。 (别担心,如果我是唯一一个在那个分支上工作的人,我只会这样做)。

在我执行“git push origin --delete BRANCHNAME”之后,我可以简单地在后面加上“git push”。

如果分支已经被删除,为什么“git push”实际上有效?
为什么我不需要再做一次“git push -u origin BRANCHNAME”?

为了说明 larsks' ,这里有一个本地分支跟踪上游分支的回购协议:

C:\Users\vonc\prog\b2dpres>git br -avv
* prez                  13a1c36 [origin/prez] 20150923

推送删除分支:

C:\Users\vonc\prog\b2dpres>git push origin --delete prez
To https://VonC@github.com/VonC/b2d.git
 - [deleted]         prez

这不会更改本地配置:

C:\Users\vonc\prog\b2dpres>git config --local --get-regexp branch.prez
branch.prez.remote origin
branch.prez.merge refs/heads/prez

也不删除本地分支:

C:\Users\vonc\prog\b2dpres>git br -avv
* prez                  13a1c36 [origin/prez: gone] 20150923

(注意"gone")

一个简单的git push就会知道要推送什么(本地当前分支prez)在哪里(到origin)和哪个分支(到它的跟踪分支origin/prez)

C:\Users\vonc\prog\b2dpres>git push
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (9/9), done.
Writing objects: 100% (10/10), 763.97 KiB | 0 bytes/s, done.
Total 10 (delta 2), reused 1 (delta 0)
To https://VonC@github.com/VonC/b2d.git
 * [new branch]      prez -> prez

它在远程端重新创建分支。