2017-04-12 42 views
0

我有一个本地分支已经与远程分支分离。我想保留本地更改并删除远程分支,我不再需要远程分支。我想知道如何通过简单地使用安全覆盖远程分支(原始地址)

git push -f 

“覆盖”远程分支有多安全?它只是删除远程分支,并创建一个新的给我的本地分支?

有没有更好的方法来做到这一点?我需要以自动方式(使用shell脚本)完成此操作,所以我无法真正手动转到Github,删除分支然后再推送。

具体而言,地方分公司已经从远程分歧的原因是因为我已经叫

git reset --soft <another-branch> 

回答

1

它不会“删除”远程分支。但是,远程分支现在将指向您分散的本地HEAD。只要你确信你想要做什么,就可以推动力量。值得一提的是,你会孤儿一些来自你的旧遥控器HEAD的提交,最终会得到GC'd。

+0

谢谢,这是有道理的,你认为git的历史将保持清洁? –

+0

我在原始问题中增加了一个细节,解释了为什么本地分支已经偏离了远程分支。 –

1

你的问题(并在一些评论中的后续行动)表明在git中有什么分支有些混淆。其他源代码管理系统可能让你受训,认为分支是一系列增量;在混帐这是完全不同的事情。

分支只是一个指向提交的指针。这个分支本身对改变历史一无所知; git通过从分支指向的提交(包含最近的更改)开始并通过“父提交”指针寻找其他提交(其中包含更早的更改)来查找信息。

分支和提交行是完全分开的东西。更新分支(例如推送),覆盖它(强制它指向一个不同的提交),甚至删除它......这些都不会对一系列提交产生任何影响。这是一系列的提交,以确保您的历史的完整性。

那么这是“安全”吗?是。历史是否仍然清洁?是的,尽管在远程分支上曾经是的提交可能不再可达(意味着它们最终可能被gc删除)。

唯一需要注意的是其他用户拥有相同远程回购的克隆。他们需要一个非常类似于git rebase文档(“从上游rebase”恢复或类似)中所解释的恢复过程。

+0

嗯,最后一点关注我 - 我是唯一一个在这个分支上工作,所以我希望它不会影响其他人。 –

+0

我在原始问题中增加了一个细节,解释了为什么本地分支已经偏离了远程分支。 –