在没有本地的情况下修改远程分支 - 后果是什么?

modifying remote branch without local - what are the consequences?

Git manual states 不能修改远程分支

Remote branches are references (pointers) to the state of branches in your remote repositories. They’re local branches that you can’t move; they’re moved automatically for you whenever you do any network communication.

但我刚刚发现我真的可以做到。
这是实验:

 cd rep1 && git init
 echo "remote" > f1.txt
 git add f1.txt
 git commit -m "remote 1st commit"
 git checkout -b new // switch branch to allow push to master from another repository

所以这个提交的哈希是 81d86e051a9c85347f3faab16e5b50d96093b75d.
现在我想让分支在另一个名为 rep2:

的存储库中作为远程分支
 cd rep2 && git init
 git remote add origin "../rep1"
 git fetch origin master
 git branch -a //outputs remotes/origin/master
 git checkout origin/master

所以现在我已经检查了远程分支,但是 HEAD 处于分离状态。然后我更改 f1.txt 并提交更改:

echo "local change" > f1.txt && git add f1.txt
git commit -m "local commit 2"

HEAD 现在指向我新提交的哈希 9ae81a259749351186f7d9f27269f1068fcafc80,但是 origin/master 仍然指向 rep1 上的提交 81d86e051a9c85347f3faab16e5b50d96093b75d
现在是魔法:

git push origin HEAD:master

更新远程上的两个主分支指针 rep1:

$ git ls-remote origin
81d86e051a9c85347f3faab16e5b50d96093b75d        HEAD
9ae81a259749351186f7d9f27269f1068fcafc80        refs/heads/master

和本地rep2:

$ cat .git/refs/remotes/origin/master
9ae81a259749351186f7d9f27269f1068fcafc80

因此我在没有创建本地分支的情况下更新了远程分支。这里有趣的是 HEAD 在远程没有改变,虽然我还不知道如何理解它。

那我为什么要花 30 分钟来试验和打字呢?如果可能的话,我想知道这种做法可能会出现的问题。

PS。免责声明,我绝对不会使用这种方法,这只是好奇。

they’re moved automatically for you whenever you do any network communication.

这正是你所做的,网络操作:

 git push origin HEAD:master

指示远程仓库 rep1 master 分支获取并合并当前 rep2 提交 HEAD。

git push updates references in refs/remotes after updating them on the repository where commits where pushed, correct?

是的,本地 rep2 中的远程跟踪分支 remotes/origin/master 因此已更新以记住远程 master(在 rep1 中)现在引用新的事实提交(因为推送是在 rep1 上作为快进合并完成的)。