我有一个与其远程对手分道扬的本地分支机构。我想保留本地更改,只需删除远程分支,我不再需要远程。我想知道通过简单地使用
“覆盖”远程分支是多么安全git push -f
这样安全吗?它会删除远程分支并在我的本地分支上创建一个新分支吗?
有更好的方法吗?我需要以自动方式(使用shell脚本)执行此操作,因此我无法真正手动转到Github,删除分支然后推送。
具体而言,本地分支偏离遥控器的原因是因为我已经调用了
git reset --soft <another-branch>
答案 0 :(得分:1)
它不会&#34;删除&#34;远程分支。但是,远程分支现在将指向您的分叉本地HEAD。只要您对自己想要做的事情充满信心,强制推动就很好。唯一值得一提的是,你可以从你的旧远程HEAD中获得一些提交,最终将获得GC。
答案 1 :(得分:1)
您的问题(以及某些评论中的后续跟踪)表明对git中 分支的一些疑惑。其他源控制系统可能让您接受培训,认为分支是一系列的增量;在git中,这是完全不同的事情。
分支只是提交的指针。分支机构本身对变化历史一无所知; git通过从分支指向的提交开始(包含最新的更改)并通过&#34; parent commit&#34;来查找信息。指向查找其他提交的指针(包含早期更改)。
分支和提交行是完全不同的东西。更新分支(例如推送),覆盖它(强制它指向不同的提交),甚至删除它......这些都不会对提交系列产生任何影响。并且它是确保历史完整性的一系列提交。
它是&#34;安全&#34;?是。历史还会干净吗?是的,虽然远程分支上以前的提交可能无法再访问(意味着它们最终可能被gc
删除)。
唯一需要注意的是其他用户是否拥有相同远程仓库的克隆。他们将需要一个非常类似于git rebase
文档中解释的恢复过程(&#34;从上游rebase恢复&#34;或某些此类)。